JFlex 错误:意外字符:YY



我正在尝试将 JFlex 与以下输入文件一起使用:

%class Lexer
%line
%column
%init{
yybegin(YYINITIAL);
%init}
%{
        Copied directly to Java file.
%}
delim       =   r|n|rn
not_newline =   .
whitespace  =   {delim} | [ tnr]
any     =   {not_newline} | {delim} | {quote}
upp_letter  =   [A-Z]
low_letter  =   [a-z]
digit       =   [0-9]
quote       =   [”]
backslash   =   [\]
escape      =   {backslash}{any}
LPAR        =   [(]
RPAR        =   [)]
COMMA       =   [,]
letter      =   {upp_letter} | {low_letter}
ID      =   {letter}({letter}|{digit})*
INT     =   {digit}+
STRING      =   {quote}({letter} | {digit} | {escape})*{quote}

%%
<YYINITIAL> {
    {ID}        { return ID }
    {INT}       { return INT }
    {LPAR}      { return symbol(sym.LPAR); }
    {RPAR}      { return symbol(sym.RPAR); }
    {COMMA}     { return symbol(sum.COMMA); }
    {STRING}    { return STRING }
    {whitespace}    {}
}
[^]         { throw new Error(“Illegal character <“+yytext()+”>”); }

(还没有100%完成,我只是想看看我是否有任何错误)

无论如何,当我尝试使用JFlex时,它给了我以下错误:

Reading "lexer2.flex"
Error in file "lexer2.flex" (line 35): 
Unexpected character 
<YYINITIAL> {
^
1 error, 0 warnings.

我以为是扫描仪开始的地方,默认情况下总是声明它?我错过了什么吗?

谢谢你的帮助。

您的 .flex 文件格式不正确。根据 JFlex 手册的定义,您必须像这样组织文件:

UserCode 
%% 
Options and declarations 
%% 
Lexical rules

您当前没有 UserCode,因此您将以 %% 开头,表示该文件立即以选项和声明开始。因此,文件的开头如下所示:

%%
%class Lexer
%line
%column

相关内容

  • 没有找到相关文章

最新更新