首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给出错误结果的SableCC解析

给出错误结果的SableCC解析
EN

Stack Overflow用户
提问于 2015-07-21 04:12:45
回答 1查看 371关注 0票数 0

我试图使用sablecc解析有效消息。有三种类型的有效消息格式。

  1. aaa;(三个连续的α字符+半{messageid} messageid semi )
  2. mm;(或两个连续阿尔法字符或数字字符{flightnum} carriercode semi)
  3. -amm (或连字符+ alpha字符+2个连续字母或数字字符{load} hypene co semi )

当我向程序输入有效字符串时,它没有工作。

投入:

abc;//类型1 ZZ;//类型2 ZZ;//类型2 -ab2;//类型3

sablecc语法代码:

代码语言:javascript
复制
 Helpers
    /* Our helpers */
    fa = ['0' .. '9'] ;
    a = [['a' .. 'z'] + ['A' .. 'Z']] ;
    m=  [a + fa];
    sp = ' ' ;
    cr = 13 ; // carriage return
    lf = 10 ; // line feed
    tab = 9 ; // tab char
    bl = sp | cr | lf | tab;


Tokens
    /* Our simple token definition(s). */
    semi = ';' bl*;
    co = (a)(m)(m);
    messageid = (a)(a)(a) ;
    carriercode = (m)(m);
    hypene ='-';

Productions
    program =  {single} statement |
                {sequence} program statement;
    statement = {messageid} messageid semi |
                {flightnum}carriercode semi |
                {load} hypene co semi ;

编译成功,当运行java代码时,它会抛出解析器异常:

simpleAdders.parser.ParserException: 1,1期待:消息发送,载波代码,'-‘

即使第一个字符串是有效的。

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 06:52:28

此错误是由重叠令牌定义引起的。Sablecc是一种自下而上的树结构,不是一种顺序方式。这是解决问题的代码。谢谢艾蒂安把问题解决了。

代码语言:javascript
复制
Helpers
    /* Our helpers */

    sp = ' ' ;
    cr = 13 ; // carriage return
    lf = 10 ; // line feed
    tab = 9 ; // tab char
    bl = sp | cr | lf | tab;


Tokens
    /* Our simple token definition(s). */

    fa = ['0' .. '9'] ;
    a = [['a' .. 'z'] + ['A' .. 'Z']] ;
    semi = ';' bl*;
    hypene ='-';

Productions
    program =  {single} statement |
                {sequence} program statement;
    m = {a} a | {fa} fa ;            
    co = hypene a [m1]:m [m2]:m semi;
    messageid = [a1]:a [a2]:a [a3]:a semi ;
    carriercode =[m1]:m [m2]:m semi;            
    statement = {messageid} messageid|
                {flightnum}carriercode |
                {load} co ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31530244

复制
相关文章

相似问题

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