今天發(fā)現(xiàn)了自己一直都理解錯的一個問題:邏輯運算符的優(yōu)先級問題。
取反的優(yōu)先級最高
&&的優(yōu)先級次之
||的優(yōu)先級最低。
今天要將循環(huán)語句翻譯成中間代碼。由于一直沒有找到很明確的關(guān)于條件表達式的語法定義。在此將自己定義的語法結(jié)構(gòu)記下啦,希望大家多多指教:
IF(BoolExp)
{
StmtSequence
}
ELSE
{
StmtSequence
}
BoolExp
----> BoolTerm | || BoolTerm
BoolTerm ----> BoolFactor | && BoolFactor
BoolFactor ----> (BoolExp) | RelExp | !BoolExp
RelExp ----> ArithExp relOp ArithExp
ArithExp ----> ArithTerm | +ArithTerm | -ArithTerm
ArithTerm ----> ArithFactor | *ArithFactor | /ArithFactor
ArithFactor -----> ID | NUM| Func| (ArithExp)
relOp -----> > | >= | < |<= | == | !=
StmtSequence -> Stmt | ;Stmt
Stmt -> AssignStmt | DeclareStmt | ConditionalStmt | CallFuncStmt
至于更細節(jié)的地方在此不做贅述。
對于結(jié)構(gòu)產(chǎn)生式的左邊每一個非終結(jié)符有一個對應(yīng)的方法。根據(jù)語法定義調(diào)用即可。
如果需要代碼請留言,并注明郵箱,發(fā)給你!!

生成控制流代碼時采用
回填技術(shù)。我覺得龍書《Compilers,Principles,Techniques,&Tools 》second Editon對于回填技術(shù)講的很清楚。