在 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"]
我正在尝试在我的编程语言中添加对数组的支持,但遇到了问题
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"]