【发布时间】:2018-04-04 23:46:19
【问题描述】:
我在 ANTLR4 中实现了一个功能。例如。 - 函数(“A”,“B”)
语法:
parse
: block EOF
;
block
: 'FUNCTION' LPAREN (atom)? COMMA (atom)? RPAREN
;
atom
: NIL #nilAtom
| list #arrayAtom
| type=(INT | DOUBLE) #numberAtom
| ID #idAtom
;
list
: BEGL array? ENDL
;
array
: array_element ( COMMA array_element )* # arrayValues
;
array_element
:
atom # array_element_types
;
COMMA : ',';
BEGL : '[';
LPAREN : '(';
RPAREN : ')';
ENDL : ']';
NIL : '' | 'null';
INT : [0-9]+ ;
DOUBLE : [0-9]+ '.' [0-9]* | '.' [0-9]+ ;
COMMENT : '#' ~[\r\n]* -> skip ;
SPACE : [ \t\r\n] -> skip ;
OTHER : . ;
对于输入FUNCTION(,"B"),
无法区分第一个参数和第二个参数。
将“B”作为第一个参数。
感谢您的帮助。
【问题讨论】:
-
顺便说一句,根元素“解析”的目的是什么?为什么不从块开始:'FUNCTION' LPAREN(原子)?逗号(原子)? LPAREN EOF
-
写过其他语法。对于问题,我仅限于此。
-
'FUNCTION' LPAREN(原子)?逗号(原子)? LPAREN -> 为什么它以 LPAREN 结尾?
-
将其更改为 RPAREN
标签: java parsing antlr grammar antlr4