エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

モノイド的構文解析(5)

モノイド的構文解析言語 MonParser - MonParser の構文解析(C# 形式)

MonParser の構文を MonParser (C# 形式)で書きます。

        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_;