1
我有我的代码法的一些错误,也许有人知道我做了什么错?无法识别的规则错误{LINEO ++;}
16 %%
17 {ws} {/*no action and no return */}
18 {}
19 {newline} {lineo++;}
20 {number} {tokenval=atoi(yytext); return(NUM);}
21 {id} {
22 int p = 0;
23 p = lookup(yytext);
24 if (p == 0)
25 p = insert (yytext, ID);
26 tokenval = p;
27 return symtable[p].token;
28
29 }
30
31 <<EOF>> {return DONE;}
32 {tokenval = NONE; return yytext[0];}
33
34
35 %%
我新手在这种技术中,我花了很多时间,但没有任何积极的结果。下面从控制台错误:
new.l:21: unrecognized rule
new.l:28: unrecognized rule
new.l:28: unrecognized rule
new.l:36: EOF encountered inside an action
new.l:36: unrecognized rule
new.l:36: fatal parse error
make: *** [lex.yy.c] Error 1
当我删除了代码whoes坏(线路:21-32)线我有一个错误:
new.l:19:2: error: ‘lineo’ undeclared (first use in this function) {newline} {lineo++;}
这是我的所有代码:https://gist.github.com/Epredator/11263395 。我试图做一些改变,但我仍然不知道它是如何工作的。我使用这个手册来Flex:http://neo.dmcs.p.lodz.pl/tk/flex/flex.pdf也许不是新的版本,但仍然有效;) – Epredator
@Epredator:我添加了一个更正的错误。另外,你的最终代码块不是'C',因为你定义的函数'lexan'没有显式的返回类型;它可能应该写成'int lexan(){return yylex(); }'但它是多余的,因为你可以直接调用'yylex'。该手册确实是一个较旧的版本,我建议使用一个更新的版本,例如我链接的那个。但它应该没问题。 – rici