在 Jison 中制作数组

Making Arrays in Jison

我正在尝试在我的编程语言中添加对数组的支持,但遇到了问题

Array
  : '[' Expr ("," Expr)* ']'
     {{ $$  = ['ArrayList', ]; }}
  | '[' Expr ']'
     {{ $$ = ['Array', ]; }}
  | '[' ']'
     {{ $$ = ['Empty']; }}
  ;

但是,这不会解析“[1,2,3,4]”。 Jison 告诉我它需要“]”,但得到的是“,”。有什么想法吗?

jison 不接受 EBNF。 (显然,它也不拒绝它。)所以你的规则:

Array
  : '[' Expr ("," Expr)* ']'

被解释为:

Array
  : '[' Expr "," Expr ']'

您需要创建一个 ExprList 产生式:

Array   : '[' ExprList ']'
        | '[' ']'
        ;
ExprList: Expr
        | ExprList ',' Expr
        ;

递归未被解释或拒绝。您必须将它分成 2 个元素才能使其工作:

Array
  : '[' Element ']'
     {{ $$  = ['ArrayList', ]; }}
  ;

Element
  : Element "," Expr
     {{ $$ =  + ',' +  }}
  | Expr
     {{ $$ =  }};

这 returns 一个符合预期的数组:

["ArrayList","1,2,3,4"]