我必须使用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
答案 0 :(得分:1)
编译器必须理解您返回的内容。如果您使用的是yacc,
,则无法做出选择:您必须遵守在%token
中为您定义的y.tab.h.:
生成的任何内容,您无需执行任何操作一点都不。
另一方面,单字符特殊字符不需要有任何名称或flex
规则:您可以为所有字符返回yytext[0]
并使用{中的相应字面值{1}}档案。
您没有提供足够的详细信息以供进一步评论。