リッチ計算機(ただし整数のみ)
変数つけた
カッコつけた
caperとcapella(AST作成ツール)のおかげで結構楽はできているが、
それでもソースがややこしくなってきた
そろそろ整理するか
ただいまの文法
%token Number<calc::Integer*> Identifier<calc::Identifier*>; %token Add Sub Mul Div Var Equal LPar RPar; %namespace calc; %dont_use_stl; //////////////////////////////////////////////////////////////// // Module Module<calc::Module*> : [makeModule] Statements(0) ; Statements<calc::Statements*> : [makeStatements0] Statement(0) | [makeStatements1] Statements(0) Statement(1) ; //////////////////////////////////////////////////////////////// // Statement Statement<calc::Statement*> : [makeStatement] VarDecl(0) | [makeStatement] Expr(0) ; //////////////////////////////////////////////////////////////// // VarDecl VarDecl<calc::VarDecl*> : [makeVarDecl] Var Identifier(0) Equal Expr(1) ; //////////////////////////////////////////////////////////////// // Expr Expr<calc::Expr*> : [makeExpr] Term(0) | [makeAdd] Expr(0) Add Term(1) | [makeSub] Expr(0) Sub Term(1) ; //////////////////////////////////////////////////////////////// // Term Term<calc::Term*> : [makeTerm] PrimExpr(0) | [makeMul] Term(0) Mul PrimExpr(1) | [makeDiv] Term(0) Div PrimExpr(1) ; //////////////////////////////////////////////////////////////// // PrimExpr PrimExpr<calc::PrimExpr*> : [makeLiteral] Number(0) | [makeVarRef] Identifier(0) | [makeParenthized] LPar Expr(0) RPar ;