用Irony實現一個計算器附上源碼



滿足的功能如下:
  1. 加減乘除四則運算
  2. 括號優先級

比如:
3+2*4 - 8/4 的結果是9
2* (2 + 3) - 2的結果是8

Irony是.net平臺下實現語言的開發工具箱。作者把C#這種強大的現代語言引入編譯器解析領域,語法規則直接通過C#語言來描述。下面看看這個計算器的語法是怎麼寫的:

Terminal num = new NumberLiteral("Number");
NonTerminal expr = new NonTerminal("Expr");
NonTerminal binOp = new NonTerminal("BinOp");
NonTerminal unOp = new NonTerminal("UnOp");
NonTerminal exprLine = new NonTerminal("ExprLine");

expr.Rule = num | unOp + expr | expr + binOp + expr | "(" + expr + ")";
binOp.Rule = ToTerm("+") | "-" | "*" | "/";
unOp.Rule = "-";
exprLine.Rule = expr + Eof;

this.Root = exprLine;

RegisterOperators(1, "+", "-");
RegisterOperators(2, "*", "/");

MarkPunctuation("(", ")");
MarkTransient(binOp, unOp);

完整代碼

想的太多,做的太少,這是我的毛病。跟人打交道方面更是一塌糊塗。我要改變這些毛病,不貪多,一點點慢慢來,多做多看,學好Lua,看看Lua的源碼,看看編譯原理,3d遊戲開發。跟人對話時,儘量自信點, 反應敏捷點。一年又一年,時間啊,你慢點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章