ANTLR语法无法正常工作。我究竟做错了什么?

青少年

我在下面有此语法,用于实现采用IN数字或字符串列表运算符。

grammar listFilterExpr;

listFilterExpr: entityIdNumberListFilter | entityIdStringListFilter;

entityIdNumberProperty
    : 'a.Id'
    | 'c.Id'
    | 'e.Id'
    ;
    
entityIdStringProperty
    : 'f.phone'
    ;

listFilterExpr
    : entityIdNumberListFilter
    | entityIdStringListFilter
    ;

listOperator
    : '$in:'
    ;

entityIdNumberListFilter
 :  entityIdNumberProperty listOperator numberList
 ;

 entityIdStringListFilter
 : entityIdStringProperty listOperator stringList
 ;

 numberList: '[' ID (',' ID)* ']';

 fragment ID: [1-9][0-9]*;

 stringList: '[' STRING (',' STRING)* ']';
 
 STRING
: '"'(ESC | SAFECODEPOINT)*'"'
;

fragment ESC
   : '\\' (["\\/bfnrt] | UNICODE)
   ;
   
fragment SAFECODEPOINT
   : ~ ["\\\u0000-\u001F]
   ;

如果我尝试解析以下输入:

c.Id $in: [1,1]

然后我在解析器中收到以下错误:

mismatched input '1' expecting ID

请帮助我纠正此语法。

更新资料

我在项目的巨大语法文件中找到了以下遵循以下规则的方法,该文件可能与'1'匹配之前才匹配ID

NUMBER
   : '-'? INT ('.' [0-9] +)?
   ;
fragment INT
   : '0' | [1-9] [0-9]*
   ;

但是,如果我ID在之前编写规则,NUMBER那么其他事情就会失败,因为它们已经匹配ID,应该匹配NUMBER

我该怎么办?

巴特·基尔斯

如rici所述:ID不应为fragment片段只能由其他词法分析器规则使用,它们永远不会自己成为令牌(因此不能在解析器规则中使用)。

只需fragment从中删除关键字即可:ID: [1-9][0-9]*;

在此处输入图片说明

请注意,您还必须考虑空格。您可能想跳过它们:

SPACES : [ \t\r\n] -> skip;

...预期ID的输入“ 1”不匹配...

看来,还有另外一个词法分析器,ID它也匹配输入1并在之前定义ID在这种情况下,请查看以下问答:ANTLR 4.5-输入“ x”不匹配,期望“ x”

编辑

因为您有这样的规则排序:

NUMBER
   : '-'? INT ('.' [0-9] +)?
   ;

fragment INT
   : '0' | [1-9] [0-9]*
   ;

ID
   : [1-9][0-9]*
   ;

词法分析器将永远不会创建ID令牌(只会创建令牌NUMBER)。ANTLR就是这样工作的:如果2个或更多的词法分析器规则匹配相同数量的字符,则定义的第一个“获胜”。

首先,我认为有一个ID仅匹配数字规则很奇怪,但是,如果这是您要解析的语言,那么可以。就您而言,您可以执行以下操作:

id     : POS_NUMBER;
number : POS_NUMBER | NEG_NUMBER;

POS_NUMBER : INT ('.' [0-9] +)?;
NEG_NUMBER : '-' POS_NUMBER;

fragment INT
   : '0' | [1-9] [0-9]*
   ;

然后在解析器规则中ID使用代替id以及使用number而不是NUMBER您现在使用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ANTLR语法无法正常工作。我究竟做错了什么?

来自分类Dev

我的boot2docker安装似乎无法正常工作。我究竟做错了什么?

来自分类Dev

我添加单词到数组(如果不在其中)已经无法正常工作。我究竟做错了什么?

来自分类Dev

我的quickSort无法正常工作。我做错了什么?

来自分类Dev

ShellExecute无法正常工作,或者我做错了什么?

来自分类Dev

Cheerio 不工作。我究竟做错了什么?

来自分类Dev

无法从此查询获取结果。我究竟做错了什么?

来自分类Dev

JComboBox。我究竟做错了什么?

来自分类Dev

验证输入。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?请

来自分类Dev

全选?我究竟做错了什么?

来自分类Dev

Strapi/Graphql。我究竟做错了什么?

来自分类Dev

我无法使我的jQuery正常工作,而且我不确定自己做错了什么

来自分类Dev

来自安全组的EC2入站无法正常工作-我做错了什么?

来自分类Dev

JPanel setColor() 重复无法正常工作还是我做错了什么?

来自分类Dev

“ For”循环停止正常工作(或者我做错了什么)

来自分类Dev

在 linux 上运行 .sh 脚本时出现语法错误。我究竟做错了什么?

来自分类Dev

我怎样才能让这些循环工作?我究竟做错了什么?

来自分类Dev

字典理解不像我想象的那样工作。我究竟做错了什么?

来自分类Dev

我的WSGI应用程序无法作为Python模块加载。我究竟做错了什么

来自分类Dev

我的 xpath 查询无法使用范围索引。我究竟做错了什么?

来自分类Dev

群集无法在Android的Google Maps中使用。我究竟做错了什么?

来自分类Dev

贴图元素无法通过地图访问。我究竟做错了什么?

来自分类Dev

无法使用来自python的机械化登录。我究竟做错了什么?

来自分类Dev

简单的HTML + PHP表单无法正确提交。我究竟做错了什么?

来自分类Dev

无法获得Vim与Vundle一起使用的插件。我究竟做错了什么?

来自分类Dev

Flexbox无法在Safari上按预期方式包装。我究竟做错了什么?

来自分类Dev

JavaScript TypeError,无法读取未定义的属性,但函数已定义。我究竟做错了什么?

来自分类Dev

无法连接到 SQL Server 数据库文件。我究竟做错了什么?

Related 相关文章

  1. 1

    ANTLR语法无法正常工作。我究竟做错了什么?

  2. 2

    我的boot2docker安装似乎无法正常工作。我究竟做错了什么?

  3. 3

    我添加单词到数组(如果不在其中)已经无法正常工作。我究竟做错了什么?

  4. 4

    我的quickSort无法正常工作。我做错了什么?

  5. 5

    ShellExecute无法正常工作,或者我做错了什么?

  6. 6

    Cheerio 不工作。我究竟做错了什么?

  7. 7

    无法从此查询获取结果。我究竟做错了什么?

  8. 8

    JComboBox。我究竟做错了什么?

  9. 9

    验证输入。我究竟做错了什么?

  10. 10

    我究竟做错了什么?请

  11. 11

    全选?我究竟做错了什么?

  12. 12

    Strapi/Graphql。我究竟做错了什么?

  13. 13

    我无法使我的jQuery正常工作,而且我不确定自己做错了什么

  14. 14

    来自安全组的EC2入站无法正常工作-我做错了什么?

  15. 15

    JPanel setColor() 重复无法正常工作还是我做错了什么?

  16. 16

    “ For”循环停止正常工作(或者我做错了什么)

  17. 17

    在 linux 上运行 .sh 脚本时出现语法错误。我究竟做错了什么?

  18. 18

    我怎样才能让这些循环工作?我究竟做错了什么?

  19. 19

    字典理解不像我想象的那样工作。我究竟做错了什么?

  20. 20

    我的WSGI应用程序无法作为Python模块加载。我究竟做错了什么

  21. 21

    我的 xpath 查询无法使用范围索引。我究竟做错了什么?

  22. 22

    群集无法在Android的Google Maps中使用。我究竟做错了什么?

  23. 23

    贴图元素无法通过地图访问。我究竟做错了什么?

  24. 24

    无法使用来自python的机械化登录。我究竟做错了什么?

  25. 25

    简单的HTML + PHP表单无法正确提交。我究竟做错了什么?

  26. 26

    无法获得Vim与Vundle一起使用的插件。我究竟做错了什么?

  27. 27

    Flexbox无法在Safari上按预期方式包装。我究竟做错了什么?

  28. 28

    JavaScript TypeError,无法读取未定义的属性,但函数已定义。我究竟做错了什么?

  29. 29

    无法连接到 SQL Server 数据库文件。我究竟做错了什么?

热门标签

归档