我有一个非常简单的yacc/lex程序的问题。我可能忘记了一些基本步骤(从使用这些工具已经很长时间了)。yacc/lex的基本问题
在我的lex程序我提供一些基本的价值观,如:
word [a-zA-Z][a-zA-Z]*
%%
":" return(PV);
{word} {
yylval = yytext;
printf("yylval = %s\n",yylval);
return(WORD);
}
"\n" return(ENDLINE);
在我的yacc程序我的语法开始是(其中TranslationUnit是我的%开始):
TranslationUnit:
/* Nothing */
| InfoBlock Data
;
InfoBlock:
/* Nothing */
| InfoBlock InfoExpression {}
;
InfoExpression:
WORD PV WORD ENDLINE { printf("$1 = %s\n",$1);
printf("$2 = %s\n",$2);
printf("$3 = %s\n",$3);
printf("$4 = %s\n",$4);
}
| ... /* other things */
;
Data:
... /* other things */
当我与输入运行我的程序:
keyword : value
我以为我会得到至少:
$1 = keyword
$2 = keyword // yylval not changed for token PV
$3 = value
$4 = value // yylval not changed for token ENDLINE
其实我得到:
$1 = keyword : value
$2 = keyword : value
$3 = value
$4 = value
我不明白这样的结果。我前段时间学过语法,即使我现在不记得任何事情,我也没有看到任何重要的错误...
在此先感谢您的帮助。
Lex代码中的'{mot}'是否为'{word}'?哦,是的 - 你会说法语,而且你大部分都是为我们翻译的。 – 2010-07-27 14:14:13
@Jonathan Leffler:对错误感到抱歉。我现在改变它。 – ThR37 2010-07-27 14:33:10