Flex使用常量Container

时间:2013-04-11 08:47:27

标签: flex-lexer

我必须使用flex编写编译器。

但是我不喜欢给定的代码而想要自己创造。

lexfile.l:

{%
    typedef enum { EQ=0, NE, PLUS, MINUS, SEMICOLON } punctuationType;
    typedef enum { PRINT=100, WHILE, IDENT } keywordType;
%}

%%
    "!="                            {   return NEQ; }
    "="                             {   return EQ; }
    "+"                             {   return PLUS; }
    "-"                             {   return MINUS; }
    ";"                             {   return SEMICOLON; }

%%

有更好的解决方案吗?

我已经搜索了一个解决方案,但另一个解决方案是定义常量。

#define EQ 0
#define NE 1
...

输出示例:

 Operator  EQ
 Operator  NE

问题仅在于,如果有更好的类型而不是Enum

1 个答案:

答案 0 :(得分:1)

编译器必须理解您返回的内容。如果您使用的是yacc,,则无法做出选择:您必须遵守在%token中为您定义的y.tab.h.:生成的任何内容,您无需执行任何操作一点都不。

另一方面,单字符特殊字符不需要有任何名称或flex规则:您可以为所有字符返回yytext[0]并使用{中的相应字面值{1}}档案。

您没有提供足够的详细信息以供进一步评论。