非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

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

モノイド的構文解析言語 MonParser - MonParser の構文解析

MonParser の構文を MonParser で書きます。

def string = /".*"/;
def operator = /'.*'/;
def identifier = /[A-Za-z_][A-Za-z0-9_]*/;
def constructor = /[A-Za-z_][A-Za-z0-9_]*/;

def term =
      "(" & expression & ")"
    | string
    | operator
    | identifier
    | constructor;

def unary_operator = '*' | '+';

def unary_expression =
      term
    | term & unary_operator ->UnaryExpression;

def conjunction = unary_expression &* "&" -> Conjunction;

def assoc_operator = '&*' | '*&';

def assoc =
      conjunction
    | conjunction & assoc_operator & operator -> AssocExpression;

def construction =
      assoc
    | assoc & '->' & constructor -> Construction;

def expression = construction &* "|" -> Expression;

def expression_statement = expression -> ExpressionStatement ;

def definition =  "def" & identifier & "=" & expression -> Definition;

def statement =
      definition
    | expression_statement;

def program = statement &* ";" -> Program;

program