![](/img/trans.png)
[英]JFLEX Error: Syntax Error @ Symbol: ID (…) Error: Illegal use of reserved word
[英]Jflex Unexpected Character error
我开始学习jflex。 当我尝试使用以下代码的jflex生成输出时,我不断收到错误消息
Error in file "\abc.flex" (line 29):
Unexpected character
[ \t\n]+ ;
^
1 error, 0 warnings.
Generation aborted.
试图运行的代码
letter [a-zA-Z]
digit [0-9]
intlit [0-9]+
%{
#include <stdio.h>
# define BASTYPTOK 257 /*following are output from yacc*/
# define IDTOK 258 /*yacc assigns token numbers */
# define LITTOK 259
# define CINTOK 260
# define INSTREAMTOK 261
# define COUTTOK 262
# define OUTSTREAMTOK 263
# define WHILETOK 264
# define IFTOK 265
# define ADDOPTOK 266
# define MULOPTOK 267
# define RELOPTOK 268
# define NOTTOK 269
# define STRLITTOK 270
main() /*this replaces the main in the lex library*\
{ int p;
while (p= yylex())
printf("%d is \"%s\"\n", p, yytext);
/*yytext is where lex stores the lexeme*/}
%}
%%
[ \t\n]+ ;
"//".*"\n" ;
{intlit} {return(LITTOK);}
cin {return(CINTOK);}
"<<" {return(INSTREAMTOK);}
\<|"==" {return(RELOPTOK);}
\+|\-|"||" {return(ADDOPTOK);}
"=" {return(yytext[0]);}
"(" {return(yytext[0]);}
")" {return(yytext[0]);}
. {return (yytext[0]); /*default action*/}
%%
有人可以帮我弄清楚是什么原因造成的。 模式也没有正确缩进。 谢谢你的帮助。
那是有效的flex
输入,但不是有效的jflex
。 由于包含的代码是用C
而不是Java
编写的,因此我不清楚为什么要使用jflex
,但是如果您打算将扫描仪移植到Java
,则可能需要阅读有关移植的JFlex手册部分。
特别是, JFlex
输入中的部分与flex
完全不同:
flex JFlex
definitions and declarations user code
%% %%
rules declarations
%% %%
user code definitions and rules
因此,您的定义和规则在flex
文件的正确部分中,而在JFlex
文件的正确部分中。 ( JFlex
只是将第一部分复制到输出中,因此它无法识别由于将Flex声明放在JFlex需要有效用户代码的位置而导致的各种语法错误。)
同样, JFlex
定义的形式为name = pattern
而不是name pattern
,因此,一旦整理出文件的顺序,您还需要添加等号。 和。 当然,用Java
重写C
代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.