JLex扫描仪生成

时间:2011-03-01 03:20:12

标签: java parsing lex

我正在使用JLex进行最新任务,试图为教授提供给我们的语言生成扫描仪。

此时,我写了以下内容 - 假设关键字和标识符规则对于我们正在使用的语言是正确的。

import java.io.*;
%%
%{
    public static void main(String argv[]) throws java.io.IOException
    {
            MyLexer yy= new MyLexer(new FileReader("input"));
            while( yy.yylex() >= 0);
    }
%}

%integer
%class MyLexer
INT =int
KEYWORDS =IF|ELSE|WRITE|READ|RETURN|BEGIN|END|MAIN|INT|REAL
IDENTIFIER =[a-zA-Z_][a-zA-Z0-9_]*
%state COMMENT
%%
{KEYWORDS}
{
    System.out.println("keyword is .. " + yytext());
}
{IDENTIFIER}
{
    System.out.println("ID is .." + yytext());
}


\r\n|.|\n {}

任何人都可以提供某种暗示或建议如何: 1.检测评论(/ * * /格式) 2.计算每次出现的标识符,关键字等。

1 个答案:

答案 0 :(得分:1)

您创建了main方法,您还可以在lex文件中为lexer创建成员变量:

%{
private int keywordCount = 0;
public static void main(String argv[]) throws java.io.IOException
{
        MyLexer yy= new MyLexer(new FileReader("input"));
        while( yy.yylex() >= 0);
}
%}

然后,您可以在与KEYWORDS相关联的代码中增加keywordCount:

{KEYWORDS}
{
System.out.println("keyword is .. " + yytext());
++keywordCount;
}

检测评论听起来像这个家庭作业的主要任务,所以我会把它留给你;)

但我会告诉你,你应该研究LEX / JFlex状态。您将检测到/ *然后转换为注释状态。当您在注释状态中检测到* /时,您将转换出注释状态。

相关问题