/*Regular Definitions*/
delim[tn]
WS{delim}+
letter[A-Za-z]
digit[0-9]
id{letter}({letter|digit})*
number{digit}+(.{digit}+?(E[+-]?{digit}+)?
%%
{WS}{/*do nothing*/}
if{printf("nIF found");return 0;}
then{printf("nTHEN found");return 0;}
else{printf("nELSE found");return 0;}
{id}{printf("nID found");return 0;}
{number}{printf("nNUMBER found");return 0;}
"<"{printf("nLess than symbol found.");return 0;}
"<="{printf("nLess than or Equals to symbol found.");return 0;}
"="{printf("nEquals to symbol found.");return 0;}
"<>"{printf("nNot equals to symbol found.");return 0;}
">"{printf("nGreater than symbol found.");return 0;}
">="{printf("nGreater than or equal to symbol found.");return 0;}
%%
在使用 flex 编译时
G:>flex Lex.l
我收到以下错误:
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 27: EOF encountered inside an action
谁能帮我?
谢谢。
1.- 用括号将交替的每个表达式括起来。
{letter}|{digit}
2.- number
定义中缺少右括号。我在第一次?
之前添加了它,但不确定。
number{digit}+(.{digit}+)?(E[+-]?{digit}+)?
3.-在规则部分中,用空格分隔模式和C
代码。
{WS} {/*do nothing*/}
这应该有效,或者至少编译:
/*Regular Definitions*/
delim[tn]
WS{delim}+
letter[A-Za-z]
digit[0-9]
id{letter}({letter}|{digit})*
number{digit}+(.{digit}+?(E[+-]?{digit}+)?)
%%
{WS} {/*do nothing*/}
if {printf("nIF found");return 0;}
then {printf("nTHEN found");return 0;}
else {printf("nELSE found");return 0;}
{id} {printf("nID found");return 0;}
{number} {printf("nNUMBER found");return 0;}
"<" {printf("nLess than symbol found.");return 0;}
"<=" {printf("nLess than or Equals to symbol found.");return 0;}
"=" {printf("nEquals to symbol found.");return 0;}
"<>" {printf("nNot equals to symbol found.");return 0;}
">" {printf("nGreater than symbol found.");return 0;}
">=" {printf("nGreater than or equal to symbol found.");return 0;}
%%