c语言 - 为什么这个 yacc 文件无法编译



我是yacc/lex的新手,我正试图编译我的第一个程序文件.y.

%{
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double /* double type for yacc stack */  
%}
%%
Lines   :       Lines S 'n' { printf("OK n"); }
|       S 'n’
|       error 'n' {yyerror("Error: reenter last line:");
yyerrok; };
S       :  '(' S ')’
|  '[' S ']’
|   /* empty */    ;
%%
#include "lex.yy.c"
void yyerror(char * s)
/* yacc error handler */
{
fprintf (stderr, "%sn", s);
}
int main(void)
{
return yyparse();
}

和,文件.l

%{
%}
%%
[ t]     { /* skip blanks and tabs */ }
n|.      { return yytext[0]; }
%%

我已经用编译了lex文件(file.l(

lex file.l

之后,使用创建yacc文件(file.y(

yacc file.y

和错误信使:

"file.y", line 9: multicharacter literal tokens not supported
file.y:9 parser name defined to default :"parse"
symbol S used, not defined as token, and no rules for it
2 rules never reduced
file.y contains 2 useless nonterminals and 2 useless rules.
"file.y", line 9: Start symbol Lines does not derive any sentence.
double free or corruption (out)
Aborted (core dumped)

你能帮我吗?

查看第9行:

|       S 'n’

应该是

|       S 'n'

请注意,从一个看起来像花式单引号的随机unicode字符到一个标准单引号字符的变化。

你在第12行和第13行也有同样的错误。

相关内容

  • 没有找到相关文章

最新更新