【问题标题】:JFLEX Error: Syntax Error @ Symbol: ID (...) Error: Illegal use of reserved wordJFLEX 错误:语法错误@符号:ID (...) 错误:非法使用保留字
【发布时间】:2017-01-24 11:07:35
【问题描述】:

我有以下 .flex 文件:

package mini_c;

import java_cup.runtime.*;
import static mini_c.sym.*;

%%

%class Lexer
%unicode            /* The characters are unicode */
%cup                /* Syntax analyser with cup (Parser part) */
%cupdebug           /* ? */
%line               /* Decompose by line */
%column             /* Decompose by column */
// %yylexthrow Exception        /* Can throw exceptions */

%{
    /* No need for preamble in JAVA */
%}

WhiteSpace  = [ \t\r\n]+
Integer     = [:digit:]+    // Digit is defined on jflex
Identifier  = ([:jletter:] | [_]) ([:jletter:] | [:digit:] | [_] )* // Will be used to read function names

%%
<YYINITIAL> {
    "(" { return new Symbol(LPAR, yyline, yycolumn); }
    ")" { return new Symbol(RPAR, yyline, yycolumn); }
    "{"
        { return new Symbol(LB, yyline, yycolumn); }
    "}" { return new Symbol(RB, yyline, yycolumn); }
    ";" { return new Symbol(SEMICOLON, yyline, yycolumn);}
    "return"
        { return new Symbol(RETURN, yyline, yycolumn); }
    {Integer}
        { return new Symbol(CST, yyline, yycolumn, Integer.parseInt(yytext())); }
    {Identifier}
        { return new Symbol(IDENT, yyline, yycolumn, yytext()); }
    .   { throw new Exception(String.format("Error in line %d, column %d: illegal character '%s'\n", yyline, yycolumn, yytexy())); }
}

当我写jflex Lexer.flex时(显然Lexer.flex是文件名) cmd显示如下:

Reading "Lexer.flex"

Warning : Macro "WhiteSpace" has been declared but never used.
Constructing NFA : 31 states in NFA
Converting NFA to DFA :
................
18 states before minimization, 15 states in minimized DFA
Old file "Lexer.java" saved as "Lexer.java~"
Writing code to "Lexer.java"
Error: Syntax error @ Symbol: ID (unknown:4/15 - unknown:4/20)
Error : Illegal use of reserved word
Warning : Scanner at 6(1): Unrecognized character '%' -- ignored
Warning : Scanner at 6(2): Unrecognized character '%' -- ignored
Warning : Scanner at 8(1): Unrecognized character '%' -- ignored
Error: Syntax error @ Symbol: ID (unknown:8/2 - unknown:8/6)
Warning : Scanner at 9(1): Unrecognized character '%' -- ignored
Warning : Scanner at 10(1): Unrecognized character '%' -- ignored
Warning : Scanner at 11(1): Unrecognized character '%' -- ignored
Warning : Scanner at 12(1): Unrecognized character '%' -- ignored
Warning : Scanner at 13(1): Unrecognized character '%' -- ignored
Warning : Scanner at 16(1): Unrecognized character '%' -- ignored
Warning : Scanner at 16(2): Unrecognized character '{' -- ignored
Warning : Scanner at 18(1): Unrecognized character '%' -- ignored
Warning : Scanner at 18(2): Unrecognized character '}' -- ignored
Warning : Scanner at 20(12): Unrecognized character '=' -- ignored
Warning : Scanner at 20(16): Unrecognized character '\' -- ignored

cmd 错误实际上更长,但我想你明白了。

当尝试在“一个简单的例子”部分下创建http://jflex.de/manual.html#Example 时。我复制粘贴示例,出现以下错误:

Reading "Lexer.flex"

Error in file "Lexer.flex" (line 87):
This seems not to be a lexical specification (first %% is missing)
                                                        yytext()+">"); }
1 error, 0 warnings.
Warning : Scanner at 7(5): Unrecognized character '%' -- ignored
Warning : Scanner at 7(6): Unrecognized character '%' -- ignored
Warning : Scanner at 9(5): Unrecognized character '%' -- ignored
Error: Syntax error @ Symbol: ID (unknown:9/6 - unknown:9/10)
Warning : Scanner at 10(5): Unrecognized character '%' -- ignored
Warning : Scanner at 11(5): Unrecognized character '%' -- ignored

谢谢!

【问题讨论】:

  • 实际上,我尝试了很多来自网络的示例,但都失败了。

标签: java flex-lexer lexer jflex


【解决方案1】:

解决了!我的 jflex.bat 文件有问题。行之有效的有这一行:

java -Xmx128m -jar %JFLEX_HOME%\lib\jflex-1.6.1.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

我有一个拼写错误,它是 jflex-1.6.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多