首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jison制作数组

用Jison制作数组
EN

Stack Overflow用户
提问于 2015-02-14 02:22:40
回答 2查看 400关注 0票数 1

我试图在我的编程语言中添加对数组的支持,并且遇到了问题

代码语言:javascript
复制
Array
  : '[' Expr ("," Expr)* ']'
     {{ $$  = ['ArrayList', $1]; }}
  | '[' Expr ']'
     {{ $$ = ['Array', $2]; }}
  | '[' ']'
     {{ $$ = ['Empty']; }}
  ;

然而,这并不能解析“1,2,3,4”。Jison告诉我,它期望"]“,但它得到了”,“。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-14 03:21:38

递归不会被解释或拒绝。您必须将它分成两个元素才能工作:

代码语言:javascript
复制
Array
  : '[' Element ']'
     {{ $$  = ['ArrayList', $2]; }}
  ;

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

这将像预期的那样返回Array:

代码语言:javascript
复制
["ArrayList","1,2,3,4"]
票数 3
EN

Stack Overflow用户

发布于 2015-02-14 03:06:20

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

代码语言:javascript
复制
Array
  : '[' Expr ("," Expr)* ']'

被解释为:

代码语言:javascript
复制
Array
  : '[' Expr "," Expr ']'

您需要创建一个ExprList产品:

代码语言:javascript
复制
Array   : '[' ExprList ']'
        | '[' ']'
        ;
ExprList: Expr
        | ExprList ',' Expr
        ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28511760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档