llvm cookbook 2.1 定义语法

实现词法分析器和语法分析器之前,需要先定义我们将要实现的语言的语法。

一个语言通常包含了变量、函数调用和常量等。为了简便,我们只有32位整数的数值常量,同时,变量是无类型的。

1 numeric expression

numeric_expr := number

2 parenthesis expression

paran_expr := '(' expression ')'

3 identifier expression

identifier_expr := identifier
identifier_expr := identifier '(' expr_list ')'

4

expr_list := (empty)
expr_list := expression (',' expression)*

5 primary expression

primary := identifier_expr
primary := numeric_expr
primary := paran_expr

6 expression can lead to binary expression

 expression := primary binoprhs

7 binary expression with RHS can yield combinations of binary operators and expressions

binoprhs := ( binoperator primary)*
binoperator := '+' / '-' / '*' / '/'

8 function declaration

func_decl := identifier '(' identifier_list ')'
identifier_list := (empty)
identifier_list := (identifier)*

9 function definition

function_defn := 'def' func_decl expression

10 top level expression

toplevel_expr := expression

示例

def foo (x, y)
 x + y * 16
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容