2種類の文を分析するための文法を探しています。つまり、空白で区切られた単語を意味します。
- ID1:数字で始まらない単語を含む文
- ID2:数字と数字で始まらない単語を含む文
基本的に、文法の構造は次のようになります。
ID1 separator ID2
ID1: Word can contain number like Var1234 but not start with a number
ID2: Same as above but 1234 is allowed
separator: e. g. '='
@Bart
2つのトークンを追加し、後でlexer-ruleで使用するためにlexer-ruleとして追加しようと'_'
しまし'"'
た。次の文法で使用していなくても
、ANTLRWorks 1.4.2で次のエラーが発生します。前のトークンが同じ入力に一致するため、次のトークン定義を一致させることはできません。そのエラー。なんで? Special
Word
Special
fragment
Special
grammar Sentence1b1;
tokens
{
TCUnderscore = '_' ;
TCQuote = '"' ;
}
assignment
: id1 '=' id2
;
id1
: Word+
;
id2
: ( Word | Int )+
;
Int
: Digit+
;
// A word must start with a letter
Word
: ( 'a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' | Digit )*
;
Special
: ( TCUnderscore | TCQuote )
;
Space
: ( ' ' | '\t' | '\r' | '\n' ) { $channel = HIDDEN; }
;
fragment Digit
: '0'..'9'
;
次に、 Lexer-ruleSpecial
をlexer-ruleで使用しますWord
。
Word
: ( 'a'..'z' | 'A'..'Z' | Special ) ('a'..'z' | 'A'..'Z' | Special | Digit )*
;