阅读了Kaleidoscope llvm教程的第一二章,大概初步了解了语言的部分词法和语法定义。

总结一下, 不完整的定义:

S: definition | external | expr | ';'
definition: 'def' prototype expr
external: 'extern' prototype 
prototype: IDENTIFIER '(' IDENTIFIER? (',' IDENTIFIER)* ')'
expr: primary | binaryExpr
primary: NUMBER | '(' expr ')' | IDENTIFIER ('(' expr? (',' expr)* ')')?
binaryExpr: primary ops expr
IDENTIFIER:  LETTER (LETTER | DIGIT)*
NUMBER: DIGIT+  ( '.' DIGIT+)?
LETTER:  [a-zA-Z_]
DIGIT: [0-9]