[咨询】Yacc & Lex 的正确使用方法

这是我的一部分代码:

%option noyywrap
%option bison-bridge
%option reentrant
...
enum {
    UNDEFINED = 1,
    CREATE,
    TABLE,
    UPDATE,
    SET,
    INSERT,
    INTO,
    VALUES,
    DELETE,
    FROM,
    SELECT,
    GET,
    PUT,
    EXIST,
    USER,
    BEGIN,
    COMMIT,
    ROLLBACK
};
...
[Cc][Rr][Ee][Aa][Tt][Ee] RETURN_TOKEN(CREATE)
[Tt][Aa][Bb][Ll][Ee] RETURN_TOKEN(TABLE)
[Uu][Pp][Dd][Aa][Tt][Ee] RETURN_TOKEN(UPDATE)
[Ss][Ee][Tt] RETURN_TOKEN(SET)
[Ii][Nn][Ss][Ee][Rr][Tt] RETURN_TOKEN(INSERT)
[Ii][Nn][Tt]Oo RETURN_TOKEN(INTO)

但是,在正式编译的时候,还是出现了问题:

[[email protected] SimpleSQL]$ lex try.l
[[email protected] SimpleSQL]$ gcc lex.yy.c
lex.yy.c:145:18: error: expected ',' or '}' before '->' token
  145 |  */
      |                  ^ 
try.l:32:5: note: in expansion of macro 'BEGIN'
   32 |     BEGIN,
      |     ^~~~~
lex.yy.c:559:5: error: unknown type name 'YYSTYPE'
  559 | 
      |     ^      
lex.yy.c:606:1: error: unknown type name 'YYSTYPE'; did you mean 'YYSTATE'?
  606 | 
      | ^      
      | YYSTATE
lex.yy.c:608:19: error: unknown type name 'YYSTYPE'; did you mean 'YYSTATE'?
  608 | 
      |                   ^      
      |                   YYSTATE
lex.yy.c:726:17: error: unknown type name 'YYSTYPE'; did you mean 'YYSTATE'?
  726 | extern int yylex \
      |                 ^~     
      |                 YYSTATE

有没有同志可以给出修订的方法? 谢谢!

多搜索一下,不要遇到问题没有搜索就往论坛发,每天发一贴。

给我的感觉是,你连错误信息都没看,就来问问题。

如果你看了错误信息,自然而然就会去尝试修改,如果还不行再来问。问要问得具体,而不是空泛的问如何「正确使用」。

正确使用当然是所有步骤都对了。如果你觉得这样回答很无语,先想清楚你应该怎么提问,你做了哪些尝试。

7 个赞

不如 试试 changpt