baseClassリスナーを拡張し、いくつかの値を読み込もうとしていますが、順序に階層がないようです。
私の文法の縮小版は次のとおりです。
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
ただし、この実装の解析ツリーはconfig_optionsレベル(ターミナルレベル)でフラットです。つまり、ルールの開始にはconfig_optionsの子が多数ありますが、EQUALSはconfig_optionsのサブツリーのルートではなく、すべてのTOKENSのルートノードとしてルールconfig_optionsがあります。代わりに、端末の1つをルートノードにするにはどうすればよいですか?
この特定のルールでは、スペースをキャプチャしたくありません。レクサーに向けられた->スキップがあることはわかっていますが、スペースが必要な場合もあります。つまり、文字列'"'(ALPHANUM |'')'"'
(注:^は機能していないようです)
入力の例は次のとおりです。
key = abcdefg
key = 90weata
key = acbefg9
私がやりたいのは、キーと値のペアを抽出することだけです。'='がルートになり、2つの子がキーと値になると思います。