为什么" myStat"不匹配

时间:2016-07-04 01:35:10

标签: antlr antlr4

目标:     我要将伪代码(将个人定义的代码和标准C混合)转换为标准C.只翻译个人定义的代码并复制标准C的部分(包括空白/制表符)。

pseudocode:
    int main()
    {
        int a = 0;
        -Export()    //personal defined code        
        return 0;
    }

target file:
    int main()
    {
        int a = 0;
        MyExport();   //translated
        return 0;
    }

g4 file:
    prog:   myStat*   |
            cppStat*    ;

    myStat : EXPORTFUNC;

    cppStat : OtherLine ;

    EXPORTFUNC    : [\t ]*'-Export()\r\n';

    NL : '\r'?'\n'

    OtherLine : OTHER* (NL|EOF);

    fragment OTHER :~[\r\n]+ ;

问题:     " -Export()"在伪代码中,不能通过解析规则" myStat"来匹配。

(prog (cppStat int main()\r\n)    
      (cppStat {\r\n)    
      (cppStat \tint a= 0;\r\n)     
      -Export\r\n                    //doesn't match "myStat"   
      (cppStat \taaaaa\r\n)    
      (cppStat }\r\n) \r\n)

我该怎么做才能纠正?

1 个答案:

答案 0 :(得分:0)

来源中的-Export()行可以与myStatcppStat规则匹配。由于最长的规则匹配获胜且cppStat包含前导空格,myStat会丢失。

作为一般原则,skip任何对解析没有语法意义的东西。