ANTLR 4 の文法は次のとおりです。
grammar Pattern;
//parser rules
parse : string LBRACK CHAR DASH CHAR RBRACK ;
string : (CHAR | DASH)+ ;
//lexer rules
DASH : '-' ;
LBRACK : '[' ;
RBRACK : ']' ;
CHAR : [A-Za-z0-9] ;
そして、次の文字列を解析しようとしています
ab-cd[0-9]
ab-cd
このコードは、アプリケーションでリテラル文字列として扱われる左側の を解析します。[0-9]
次に、この場合は任意の数字に変換される文字セットとして解析します。私の文法は私にとってはうまくいきますが(CHAR | DASH)+
、単にトークンとして扱われるときにパーサー規則として持つのは好きではありません。レクサーがトークンを作成しSTRING
、次のトークンを提供することをお勧めします。
"ab-cd" "[" "0" "-" "9" "]"
これらの代わりに
"ab" "-" "cd" "[" "0" "-" "9" "]"
私は他の例を見てきましたが、それを理解することができませんでした。通常、他の例では、そのような文字列リテラルを引用符で囲んでいるか、入力を区切るのに役立つ空白を使用しています。どちらも避けたい。これはレクサールールで達成できますか、それとも私がやっているようにパーサールールで処理し続ける必要がありますか?