首页 文章

未缩进的代码打破了我的语法

提问于
浏览
7

我有一个.g4语法vba / vb6一个词法分析器/解析器,其中词法分析器正在跳过行连续标记 - 不跳过它们会破坏解析器并且不是_x50840_ s有问题的词法分析器规则:

LINE_CONTINUATION : ' ' '_' '\r'? '\n' -> skip;

这导致的问题是,只要在第1列开始连续行,解析器就会爆炸:

子测试()
Debug.Print“Some text”&_
vbNewLine和“更多文字”
结束子

我想“嘿,我知道!我只是预处理字符串我正在喂ANTLR在下划线之前插入一个额外的空格,并改变语法接受它!”

所以我改变了这样的规则:

LINE_CONTINUATION : WS? WS '_' NEWLINE -> skip;
NEWLINE : WS? ('\r'? '\n') WS?; 
WS : [ \t]+;

...上面的测试vba代码给了我这个解析器错误:

无关输入'vbNewLine'期待WS

目前我唯一的解决方案是告诉我的用户正确缩进他们的代码 . 有什么方法可以解决这个语法规则吗?

(GitHub上的完整VBA.g4语法文件)

1 回答

  • 4

    你基本上希望行继续被视为空格 .

    好的,然后将行继续的词法定义添加到WS令牌 . 然后WS将选择行继续,并且您不需要任何地方的LINECONTINUATION .

    //LINE_CONTINUATION : ' ' '_' '\r'? '\n' -> skip;
    NEWLINE : WS? ('\r'? '\n') WS?; 
    WS : ([ \t]+)|(' ' '_' '\r'? '\n');
    

相关问题