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