この問題は私に何度も発生しました。問題を完全には理解していません。私の構文は次のようになります。
grammar Syntax;
options {
language = Java;
backtrack = true;
}
rule: ('syntax' (INTEGER | HEX) ';')? (structure | packet)+;
structure: ('struct' | 'structure')? field;
packet: 'packet'? NAME '{' field+ '}';
field: NAME (':' | '=' | ':=' | '->')? value ';';
value: (TYPE (MULT (INTEGER | HEX))?);
MULT: 'x' | 'X';
INTEGER: ('0'..'9')+;
HEX: '0x' ('0'..'9' | 'A'..'F' | 'a'..'f');
TYPE: ('unsigned'? 'byte' | 'short' | 'int16' | 'int8')
| 'int' | 'int32'
| 'long' | 'int64'
| 'char' | 'char8' | 'char16' | 'unicode'
| 'utf' | 'utf8' | 'utf16';
NAME: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
WHITESPACE: ( ' ' | '\n' | '\r' | '\f' | '\t')+{$channel = HIDDEN;} ;
テストケースは次のようになります。
syntax 1;
packet a
{
a int;
b byte;
d byte x 10;
c int x b;
}
エラーは次のとおりです。