认识到真正的价值
Recognizing a REAL value
我正在尝试识别真实值(例如xxx.xx)
这个语法不起作用
grammar Test;
realValue:
NUMBER DOT DECIMALS
;
DOT:
'.'
;
NUMBER:
'0' | ('1'..'9')('0'..'9')*
;
DECIMALS:
('0'..'9')('0'..'9')*
;
WS:
(' '|'\r'|'\t'|'\n') -> skip
;
OTHER:
.
;
当我 运行 TestRig 具有以下输入时
123.45
我得到一个
line 1:4 mismatched input '45' expecting DECIMALS
我错过了什么?
line 1:4 mismatched input '45' expecting DECIMALS
你得到那个错误是因为 45
被标记为 NUMBER
。 NUMBER
在 DECIMALS
之前定义,因此 NUMBER
获得优先权。词法分析器不会 "listen" 解析器在给定时间可能需要的内容。
这可行:
realValue
: NUMBER DOT NUMBER
;
但是,您不想在解析器规则中将标记粘合在一起以创建 realValue
。否则像这样输入: 123 .45
可能会变成单个 realValue
.
真正的应该是词法分析器规则:
number
: INT
| REAL
;
INT
: '0'
| [1-9] [0-9]*
;
REAL
: [0-9]* '.' [0-9]+
;
WS
: [ \t\r\n] -> skip
;
OTHER
: .
;
对于E,使用科学记数法。
例如,Accepted Real 是:
1.0,
1e-12,
1.0e-12,
0.000000001
到目前为止,我已经测试了 GRAMMAR ANTLR v4 of Real Number
fragment DIGIT : [0-9] ;
INT : DIGIT+ ;
SUBREAL : (INT)('e')?('+'|'-')?(INT)*;
DOT: '.';
REAL : SUBREAL DOT SUBREAL;
ID : (REAL)*;
我正在尝试识别真实值(例如xxx.xx)
这个语法不起作用
grammar Test;
realValue:
NUMBER DOT DECIMALS
;
DOT:
'.'
;
NUMBER:
'0' | ('1'..'9')('0'..'9')*
;
DECIMALS:
('0'..'9')('0'..'9')*
;
WS:
(' '|'\r'|'\t'|'\n') -> skip
;
OTHER:
.
;
当我 运行 TestRig 具有以下输入时
123.45
我得到一个
line 1:4 mismatched input '45' expecting DECIMALS
我错过了什么?
line 1:4 mismatched input '45' expecting DECIMALS
你得到那个错误是因为 45
被标记为 NUMBER
。 NUMBER
在 DECIMALS
之前定义,因此 NUMBER
获得优先权。词法分析器不会 "listen" 解析器在给定时间可能需要的内容。
这可行:
realValue
: NUMBER DOT NUMBER
;
但是,您不想在解析器规则中将标记粘合在一起以创建 realValue
。否则像这样输入: 123 .45
可能会变成单个 realValue
.
真正的应该是词法分析器规则:
number
: INT
| REAL
;
INT
: '0'
| [1-9] [0-9]*
;
REAL
: [0-9]* '.' [0-9]+
;
WS
: [ \t\r\n] -> skip
;
OTHER
: .
;
对于E,使用科学记数法。
例如,Accepted Real 是:
1.0,
1e-12,
1.0e-12,
0.000000001
到目前为止,我已经测试了 GRAMMAR ANTLR v4 of Real Number
fragment DIGIT : [0-9] ;
INT : DIGIT+ ;
SUBREAL : (INT)('e')?('+'|'-')?(INT)*;
DOT: '.';
REAL : SUBREAL DOT SUBREAL;
ID : (REAL)*;