一個完整的編譯器前端

文法

//首先程序由一個塊組成,塊中包含可選聲明和語句。

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 

詞法分析器

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