gpt4 book ai didi

compiler-errors - lex {lineo++;}中无法识别的规则错误

转载 作者:行者123 更新时间:2023-12-02 10:44:34 25 4
gpt4 key购买 nike

我的lex代码中有一些错误,也许有人知道我做错了...

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

当我删除那行糟糕的代码行(21-32行)时,我遇到了这个错误:

new.l:19:2: error: ‘lineo’ undeclared (first use in this function) {newline} {lineo++;}

最佳答案

  • 第18行({})错了; flex会将其视为一种模式,而不是一种 Action 。
  • 您可能打算编写lineno(即一种键入“LineNº”的方式,这是“line number”的缩写。)但是您是否在某处声明了它?还是您打算使用yylineno
  • 您定义了{id}吗?错误消息表明您没有,但是您没有粘贴定义。
  • 在第32行中,默认规则的模式为.:
    . {tokenval = NONE; return yytext[0];}
  • 您读过方便的flex manual吗?

  • 除上述内容外,作为第3点的替代,定义:
    id      {letter}({letter} | {digit})*

    是不正确的,因为正则表达式不能包含未加引号的空格。您需要将其写为
    id      {letter}({letter}|{digit})*

    关于compiler-errors - lex {lineo++;}中无法识别的规则错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255839/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com