2016-07-04 13 views
0

目標: 私は擬似コード(個人的に定義されたコードと標準Cを混在させたもの)を標準Cに変換しようとしています.Jは個人的に定義されたコードを翻訳し、 C(ブランク/タブを含む)。なぜ "myStat"が一致しないのですか

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) 

修正するにはどうすればよいですか?

答えて

0

ソースの-Export()行は、myStatcppStatの両方の規則で一致させることができます。最長のルールマッチが勝ち、cppStatに先頭の空白が含まれているので、myStatが失われます。

一般的な原則として、構文解析上構文的に重要でないものはすべてskipです。

+0

私は '[\ t] *' - Export()\ r \ n ''に変更しますが、それでも仕事はできません。途中で空白(タブ)を残す必要があります。 – MarkMa

関連する問題