Parsing “的非左递归PEG语法;表达方式;
它要么是一个简单的标识符(如Parsing “的非左递归PEG语法;表达方式;,parsing,compiler-construction,programming-languages,lexer,Parsing,Compiler Construction,Programming Languages,Lexer,它要么是一个简单的标识符(如cow),要么是一个用括号括起来的东西((…)),要么是一个看起来像方法调用(…(…))的东西,要么是一个看起来像成员访问的东西(thing.member): def expr=标识符| (“~>expr expr诀窍是拥有多个规则,其中每个规则的第一个元素是下一个规则,而不是对同一规则的递归调用,并且规则的其余部分是可选的和重复的。例如,以下内容适用于您的示例: def expr=方法调用 def method\u call=member\u access(“(“~
cow
),要么是一个用括号括起来的东西((…)
),要么是一个看起来像方法调用(…(…)
)的东西,要么是一个看起来像成员访问的东西(thing.member
):
def expr=标识符|
(“~>expr expr诀窍是拥有多个规则,其中每个规则的第一个元素是下一个规则,而不是对同一规则的递归调用,并且规则的其余部分是可选的和重复的。例如,以下内容适用于您的示例:
def expr=方法调用
def method\u call=member\u access(“(“~>expr identifier)*
def原子_表达式=标识符|
“(“~>expr
def expr = identifier |
"(" ~> expr <~ ")" |
expr ~ ("(" ~> expr <~ ")") |
expr ~ "." ~ identifier