モノイド的構文解析言語 MonParser - MonParser の構文解析(C# 形式)
MonParser の構文を MonParser (C# 形式)で書きます。
- 「str(文字列)」は構文木で使われない文字列を表します。正規表現を使うことができます。
- 「op(文字列)」は構文木で使う文字列を表します。正規表現を使うことができます。
- 「list(構文要素, 文字列)」は前回のバージョンでは「&*」と「*&」のコンストラクターを指定せず単にリストとなるものを表します。
- 「式 ^ コンストラクター」は前回のバージョンでは「式 -> コンストラクター」という式を表します。
par str(string s) => par.String(s); par op(string s) => par.Operator(s); par list(par p, string s) => par.List(p, s); par string_ => str(@""".*"""); par operator_ => str(@"'.*'"); par identifier => str(@"[A-Za-z_][A-Za-z0-9_]*"); par constructor => str(@"[A-Za-z_][A-Za-z0-9_]*"); par term => str("(") & expression & str(")") | string_ | operator_ | identifier | constructor; par unary_operator => str("*") | str("+"); par unary_expression => term | term & unary_operator ^ SyntaxTree.UnaryExpression; par conjunction => list(term, "&") ^ SyntaxTree.Conjunction; par assoc_operator => op("&*") | op("*&"); par assoc => conjunction | conjunction & assoc_operator & operator_ ^ SyntaxTree.AssocExpression; par construction => assoc | assoc & str("->") & constructor ^ SyntaxTree.Construction; par expression => list(construction, "|") ^ SyntaxTree.Expression; par expression_statement => expression ^ SyntaxTree.ExpressionStatement; par definition => str("def") & identifier & str("=") & expression ^ SyntaxTree.Definition; par statement => definition | expression_statement; par program => list(statement, ";") ^ SyntaxTree.Program_;