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