一个完整的编译器前端

文法

//首先程序由一个块组成,块中包含可选声明和语句。

programs -> block
block -> { decls stmts}

//声明包括类型,id以及分号
decls -> decls decl | ε
decls  -> type id;

//类型可以是数组和基础数据类型
type -> type [ num] | basic 
stmts -> stmts stmt | ε

//stmt 可以是赋值和if嵌套以及do-while嵌套。
stmt -> loc = bool;
  | if ( bool ) stmt //bool表示bool值
  | if ( bool ) stmt else stmt 
  | while ( bool ) stmt
  | do stmt while ( bool );
  | break;
  | block

//stmt的左值是数组的某个元素的引用或id
loc -> loc [ bool ] | id

//划分了|| 和 &&的优先级(&&的优先级高于||)
bool -> bool || join | join
join -> join && equality | equality
equality -> equality == rel | equality != rel | rel 
rel -> expr < expr | expr <= expr | expr >=expr | expr > expr | expr
expr -> expr + term | expr - term  | term
unary -> !unary | -unary | factory
factory -> ( bool ) | loc | num | real | true | false 

词法分析器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章