-
Notifications
You must be signed in to change notification settings - Fork 0
Example
kik edited this page Sep 13, 2010
·
2 revisions
S式みたいなのの構文解析を行うサンプル
expr ::= int_lit | token('(') op expr expr token(')')
int_lit ::= token(int_lit_s)
op ::= token(op_s)
int_lit_s ::= digit+
op_s ::= alpha+
token(T) ::= T ws*
token(T) はジェネリックなルールで後ろについた空白文字を食べる。
actionを定義しなくても、boost::fusion::vector<T1, T2, T3, …>ならそのまま作ってくれるよサンプル。
普通の式の構文解析を行うサンプル。よくある左再起を除去した規則をジェネリックに書いてみる
start ::= expr
primary_expr ::= int_lit | '(' expr ')'
multi_expr ::= left_assoc_expr(primary_expr, '*' | '/')
expr ::= left_assoc_expr(multi_expr, '+'|'-')
left_assoc_expr(T, Op) ::= T (Op T)*
空白の除去の規則は省略。
sample-3をASTを生成するように変更したもの