我试图在我的编程语言中添加对数组的支持,并且遇到了问题
Array
: '[' Expr ("," Expr)* ']'
{{ $$ = ['ArrayList', $1]; }}
| '[' Expr ']'
{{ $$ = ['Array', $2]; }}
| '[' ']'
{{ $$ = ['Empty']; }}
;然而,这并不能解析“1,2,3,4”。Jison告诉我,它期望"]“,但它得到了”,“。有什么想法吗?
发布于 2015-02-14 03:21:38
递归不会被解释或拒绝。您必须将它分成两个元素才能工作:
Array
: '[' Element ']'
{{ $$ = ['ArrayList', $2]; }}
;
Element
: Element "," Expr
{{ $$ = $1 + ',' + $3 }}
| Expr
{{ $$ = $1 }};这将像预期的那样返回Array:
["ArrayList","1,2,3,4"]发布于 2015-02-14 03:06:20
jison不接受EBNF。(显然,它也没有拒绝它。)所以你的规则:
Array
: '[' Expr ("," Expr)* ']'被解释为:
Array
: '[' Expr "," Expr ']'您需要创建一个ExprList产品:
Array : '[' ExprList ']'
| '[' ']'
;
ExprList: Expr
| ExprList ',' Expr
;https://stackoverflow.com/questions/28511760
复制相似问题