首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jflex意外字符错误

Jflex意外字符错误
EN

Stack Overflow用户
提问于 2014-10-23 14:22:31
回答 1查看 1.1K关注 0票数 1

我开始学习jflex。当我尝试使用jflex为以下代码生成输出时,我总是得到一个错误

代码语言:javascript
复制
Error in file "\abc.flex" (line 29): 
Unexpected character

[ \t\n]+                ;
^
1 error, 0 warnings.

Generation aborted.

尝试运行的代码

代码语言:javascript
复制
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*/}

%%

有没有人能帮我弄清楚,是什么导致了这个问题。模式也是正确的无缩进的。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-10-24 01:24:39

这是有效的flex输入,但它不是有效的jflex。因为所包含的代码是用C编写的,而不是用Java编写的,所以我不清楚为什么要使用jflex,但是如果您打算将扫描器移植到Java,那么您可能需要阅读JFlex manual section on porting.

特别是,JFlex输入中的部分与flex中的部分有很大的不同

代码语言:javascript
复制
        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代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26522327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档