0

对于语法:

grammar qwe;

query
    : COLUMN OPERATOR value EOF
    ;

COLUMN
    : [a-z_]+
    ;

OPERATOR
    : ('='|'>'|'<')
    ;

SCALAR
    : [a-z_]+
    ;

value
    : SCALAR
    ;

WS : [ \t\r\n]+ -> skip ;

有相同的规则COLUMNSCALAR在这里,我被建议使用grun别名。

我为我的 Ubuntu 安装了它。对于文件夹结构:

在此处输入图像描述

从项目learning_antlr4级别运行:

grun qwe tokens -tokens < qwe/qwe.tokens

输出为空。

我错了什么?别名保存在哪里?

4

1 回答 1

1

假设您设置了 grun 别名(如果没有,请参阅本页顶部的快速入门https://www.antlr.org):

您想要的是查看 Lexer 处理您的输入(而不是您的qwe.tokens文件)产生的令牌流

qwe.txt:

total_sales>qwe
ANTLR on  master [✘+?] 
➜ antlr4 qwe.g4      

ANTLR on  master [✘+?] 
➜ javac *.java

ANTLR on  master [✘+?] 
➜ grun qwe tokens -tokens < qwe.txt
[@0,0:10='total_sales',<COLUMN>,1:0]
[@1,11:11='>',<OPERATOR>,1:11]
[@2,12:14='qwe',<COLUMN>,1:12]
[@3,15:14='<EOF>',<EOF>,1:15]

如您所见......两者total_salesqwe被识别为COLUMN令牌,

于 2021-08-31T16:16:22.883 回答