使用可选括号解析函数调用

时间:2015-11-28 07:19:35

标签: parsing yacc

我坚持如何编写我的语法,使得函数调用中的括号是可选的(如Ruby中)。

这是我现在的语法(简化版本)。

expr:
    '-' expr
  | expr '+' application
  | application

application:
    primary arg_list
  | primary '(' arg_list ')'
  | primary '(' ')'
  | primary

arg_list:
    application
  | application ',' arg_list

primary:
    IDENT
  | '(' expr ')'

f a, b之类的表达式应解析为App(f, [a, b])f f a, b应为App(f, App(f, [a, b]))

我没有能够在没有转换/减少冲突的情况下解析后者。关于如何构造语法的任何想法,以便我们可以拥有任意嵌套的运算符和应用程序,如(f f c + a) + b,而不会发生冲突?

0 个答案:

没有答案