首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析ANTLR中的标识符

解析ANTLR中的标识符
EN

Stack Overflow用户
提问于 2017-02-10 05:36:35
回答 1查看 112关注 0票数 1

我遇到了一个问题,我试图在ANTLR4中匹配标识符,但它似乎会在一段时间后将它们切断。以下是我的语法的相关部分:

代码语言:javascript
复制
prog: (EOL)* statements;
statements: statement (EOL)+ (statement (EOL)+)* ;
statement : declaration ;
declaration : mutability ' '+ ident ' '* assign_operator ' '* expression ;
block : '{' statements '}';
expression : ident
           | number ;
EOL : '\n' ;
mutability : ('let'|'var') ;
assign_operator : '=' ;
number : ('-'?(DIGIT|'_')+('.')?(DIGIT|'_')*('e''-'?)?(DIGIT|'_')*) ;
ident : ('_'|LETTER) ('_'|LETTER|DIGIT)* ;
DIGIT : '0'..'9' ;
LETTER : ('a'..'z'|'A'..'Z') ;

下面是我的测试用例:

代码语言:javascript
复制
let _1 = 5
let _12 = 5
let _123 = 5
let _1234 = 5
let _12345 = 5
let _123456 = 5
let _1234567 = 5
let _12345678 = 5
let _123456789 = 5
let _1234567890 = 5

let a = 5
let ab = 5
let abc = 5
let abcd = 5
let abcde = 5
let abcdef = 5

它对除最后两个语句以外的所有语句都有效。它给了我

代码语言:javascript
复制
line 33:8 no viable alternative at input 'let abcde'
line 34:8 no viable alternative at input 'let abcde'

并且无法对它们进行解析。我不明白如果我以_开头并使用一堆数字,但每次使用相同数量的字母后它都失败了,为什么它会起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 00:46:01

检查令牌流输出。通常,这类问题是由lexer生成的错误标记引起的。

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

https://stackoverflow.com/questions/42147342

复制
相关文章

相似问题

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