この問題は何度も起こりました。 私は完全に問題を完全に理解していません。 私の構文は次のようになります。Antlr 3は構文述語を扱うことができません
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;
}
今エラーは、次のとおりです。
TheBreadCatが、私はANTLRについて何も知りませんが、これはhttp://www.antlr.org/pipermail/antlr-interest/2009-February/033062.html示唆多分あなた」実際のパーサを生成/コンパイル/実行するのではなく、ANTLRworksインタプリタを使用します。インタープリタは言語のすべての機能を実装しません。 –
( 'backtrack = true'は述語を自動的に挿入することで実装されているようです) –
Gareth McCaughan、私はeclipseプラグインの組み込みのインタプリタを使用しています。しかし、私は実際のテストケースを試みようとします。 – NullData