首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Jison语法有关的问题,来自generate解析器的奇怪错误

与Jison语法有关的问题,来自generate解析器的奇怪错误
EN

Stack Overflow用户
提问于 2013-11-14 14:53:56
回答 1查看 757关注 0票数 0

我正在编写一个简单的Jison语法,以便在开始一个更复杂的项目之前获得一些经验。我尝试了一种简单的语法,它是一个逗号分隔的数值范围列表,其中的起始值和结束值是相同的,可以使用一个数字速记。但是,当在某些测试输入上运行生成的解析器时,我会得到一个错误,这对我来说没有多大意义。这是我想出的语法:

代码语言:javascript
复制
/* description: Parses end executes mathematical expressions. */

/* lexical grammar */
%lex
%%

\s+                   /* skip whitespace */
[0-9]+                {return 'NUMBER'}
"-"                   {return '-'}
","                   {return ','}
<<EOF>>               {return 'EOF'}
.                     {return 'INVALID'}

/lex

/* operator associations and precedence */

%start ranges

%% /* language grammar */

ranges
    : e EOF
        {return $1;}
    ;

e   :  rng { $$ = $1;}
    | e ',' e {alert('e,e');$$ = new Array(); $$.push($1); $$.push($3);}
    ;

rng
    : NUMBER '-' NUMBER
        {$$ = new Array(); var rng = {Start:$1, End: $3; }; $$.push(rng); }
    | NUMBER
        {$$ = new Array(); var rng = {Start:$1, End: $1; }; $$.push(rng);}
    ;

NUMBER: {$$ = Number(yytext);};

测试输入如下:

代码语言:javascript
复制
5-10,12-16

产出如下:

代码语言:javascript
复制
Parse error on line 1:
5-10,12-16
^
Expecting '-', 'EOF', ',', got '8'

如果它把'a‘放在前面,我会得到和预期的错误,发现“无效”,但我没有一个"8“的输入字符串,所以我想知道这是否是一个内部状态?

我正在使用在线解析器生成器:http://zaach.github.io/jison/try/

有什么想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-14 15:12:18

这个产品让Jison很困惑(我也很困惑: ):

代码语言:javascript
复制
NUMBER: {$$ = Number(yytext);};

NUMBER应该是一个终端,但是上面的产品将它声明为一个空体的非终端。因为它不能匹配任何东西,所以它立即匹配,并且语法不允许连续两个NUMBER。因此出现了错误。

此外,您的语法也是模棱两可的,尽管我认为Jison的默认值将解决这个问题。不过,最好是直截了当,因为这很容易。你的规则:

代码语言:javascript
复制
e   : rng 
    | e ',' e

没有指定,“关联”的方式:换句话说,rng , rng , rng应该被看作是e , rng还是rng , e。第一个可能对您更好,因此您应该显式地编写它:

代码语言:javascript
复制
e   :  rng
    |  e ',' rng

上面的一个优点是您不需要在第二个产品中创建一个新的数组;您可以将$3推到$1的末尾,并将$$设置为$1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19980853

复制
相关文章

相似问题

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