目标: 我要将伪代码(将个人定义的代码和标准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)
我该怎么做才能纠正?
答案 0 :(得分:0)
来源中的-Export()
行可以与myStat
和cppStat
规则匹配。由于最长的规则匹配获胜且cppStat
包含前导空格,myStat
会丢失。
作为一般原则,skip
任何对解析没有语法意义的东西。