我在ANTLR4中有以下语法
grammar DEF;
def
:
'DEF' vartypes ID ';'
;
ID
:
(
'A' .. 'Z'|'a'..'z'
)+
;
vartypes
:
INT
| REAL
;
INT:'INT';
REAL:'REAL';
VARIABLE
:
(
'A' .. 'Z'
| 'a' .. 'z'
| '0' .. '9'
| '_'
| '-'
)+
;
fragment VARTYPEREAL
:
'REAL'
;
fragment VARTYPEINT
:
'INT'
;
LINENUMBER
:
'N' INTVALUE
;
INTVALUE
:
(
'-'
)?
(
'0' .. '9'
)+
;
WS
:
(
' '
| '\t'
| '\n'
| '\r'
)+ -> skip
;
line 1:4 missing {'INT', 'REAL'} at 'REAL'
grammar DEF;
def
:
'DEF' vartypes ID ';'
;
ID
:
(
'A' .. 'Z'|'a'..'z'
)+
;
vartypes
:
'INT'
| 'REAL'
;
VARIABLE
:
(
'A' .. 'Z'
| 'a' .. 'z'
| '0' .. '9'
| '_'
| '-'
)+
;
fragment VARTYPEREAL
:
'REAL'
;
fragment VARTYPEINT
:
'INT'
;
LINENUMBER
:
'N' INTVALUE
;
INTVALUE
:
(
'-'
)?
(
'0' .. '9'
)+
;
WS
:
(
' '
| '\t'
| '\n'
| '\r'
)+ -> skip
;
一切都很好.我在语法1中哪里错了?
在第一个语法中,int
和real
规则位于id
之后,因此字符串“int”和“real”与id
规则匹配。在第二个语法中,您使用字符串,它(在混合语法中)创建了优先于显式规则的隐式lexer规则。
要修复第一个语法,请将int
和real
移动到id
规则之上。
我对ANTLR相对来说是新的,所以请原谅我。 但是当我试图解析下面的表达式时 我最终出现以下错误: 第1:38行:'''处的令牌识别错误 第1:42行:'''处的令牌识别错误 规则r没有方法或者它有参数 规则'r'的意思是什么?我怎么能理解问题的原因呢?任何帮助都将不胜感激!
我是ANTLR的新手,并使用ANTLR4(4.7.2 Jar文件)。我目前正在研究Oracle解析器。我对十进制数字有问题。我只保留了相关的部分。我的语法文件如下。 我该怎么做?我尝试过使用_input.la(-1)!='.'}?等,但对我来说并不正确。我尝试了提到的许多其他步骤(大多数解决方案适用于ANTLR3,但不适用于ANTLR4)。在lexer中有没有一种简单的方法可以做到这一点?我不想编
null 对此任何帮助都将不胜感激。
但我看不出这两个规则中有任何空字符串的可能性。还是我错了?这个代码有什么问题?
我的语法允许以下操作: 我从其他语法中抓了几个东西来玩。我的主要问题是我的expr规则。给定以下输入:,我期望解析树会找到..规则,但它将解释0。并不正确解析其余部分。 如果在我的0后面加上一个空格,就可以了: 谢了!