我想使用 Antlr4 编写一个语法来解析一些定义,但我一直在努力让 Antlr 合作。
定义有两种线,一种类型和一种属性。我可以让我的语法正确解析类型行,但它要么忽略属性行,要么无法识别 PROPERTY_TYPE,具体取决于我如何调整语法。
这是我的语法(尝试#583):
grammar TypeDefGrammar;
start
: statement+ ;
statement
: type NEWLINE
| property NEWLINE
| NEWLINE ;
type
: TYPE_KEYWORD TYPE_NAME; // e.g. 'type MyType1'
property
: PROPERTY_NAME ':' PROPERTY_TYPE ; // e.g. 'someProperty1: int'
TYPE_KEYWORD
: 'type' ;
TYPE_NAME
: IDENTIFIER ;
PROPERTY_NAME
: IDENTIFIER ;
PROPERTY_TYPE
: IDENTIFIER ;
fragment IDENTIFIER
: (LETTER | '_') (LETTER | DIGIT | '_' )* ;
fragment LETTER
: [a-zA-Z] ;
fragment DIGIT
: [0-9] ;
NEWLINE
: '\r'? '\n' ;
WS
: [ \t] -> skip ;
这是一个示例输入:
type SimpleType
intProp1: int
stringProp2 : String
(返回类型但忽略 intProp1、stringProp2。)
我究竟做错了什么?