vba/vb6のレクサー/パーサーの.g4文法があります。レクサーが行継続トークンをスキップしているため、パーサーをスキップすることはできません。これが原因となっているインデントされていないコードで自分の文法が壊れる
LINE_CONTINUATION : ' ' '_' '\r'? '\n' -> skip;
問題は、継続行は、カラム1で起動するたびに、パーサが吹くということである:ここで問題になっているレクサールールです
Sub Test() Debug.Print "Some text " & _ vbNewLine & "Some more text" End Sub
は、私はちょっと私が知っている」と思いました!アンダースコアの前に余分な空白を挿入し、それを受け入れるように文法を変更するためにANTLRに与えている文字列をプリプロセスします。
だから私はこのようなルールの変更:
LINE_CONTINUATION : WS? WS '_' NEWLINE -> skip;
NEWLINE : WS? ('\r'? '\n') WS?;
WS : [ \t]+;
を...そして上記のテストvbaのコードは、私にこのパーサエラーました:今、私の唯一の解決策は、私を伝えることであるために
extraneous input 'vbNewLine' expecting WS
をユーザーがコードを適切にインデントするその文法規則を修正する方法はありますか?
(Full VBA.g4 grammar file on GitHub)
なぜLINE_CONTINUATIONをWSにマージしないのですか? –
@IraBaxter「WS」は、他の多くの場所で使用されています。どういう意味ですか? –
基本的には、行の継続を空白のように扱いたいと思っています。 [OK]をクリックして、WSトークンに語継続の行継続を追加します。 –