我是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行也有同样的错误。