Parsing 使用可选括号解析函数调用
我被困在如何编写语法上,以至于函数调用中的括号是可选的(比如Ruby) 这是我现在掌握的语法(精简版)Parsing 使用可选括号解析函数调用,parsing,yacc,Parsing,Yacc,我被困在如何编写语法上,以至于函数调用中的括号是可选的(比如Ruby) 这是我现在掌握的语法(精简版) expr: '-' expr | expr '+' application | application application: primary arg_list | primary '(' arg_list ')' | primary '(' ')' | primary arg_list: application | application
expr:
'-' expr
| expr '+' application
| application
application:
primary arg_list
| primary '(' arg_list ')'
| primary '(' ')'
| primary
arg_list:
application
| application ',' arg_list
primary:
IDENT
| '(' expr ')'
像fa,b
这样的表达式应该解析为App(f[a,b])
fa,b
应该是App(f,App(f[a,b]))
我从未能够让后者在没有移位/减少冲突的情况下进行解析。关于如何构造语法,使我们可以任意嵌套运算符和应用程序,如(fc+a)+b
,而不发生冲突,有什么想法吗