首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在生成JLex扫描器

正在生成JLex扫描器
EN

Stack Overflow用户
提问于 2011-03-01 11:20:12
回答 1查看 814关注 0票数 0

我正在使用JLex来完成我们的最新作业,试图为教授给我们的一种语言生成一个扫描器。

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

代码语言:javascript
复制
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.计算每次出现的标识符,关键字等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-01 11:40:00

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

代码语言:javascript
复制
%{
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);
}
%}

然后,您可以在与关键字关联的代码中递增keywordCount:

代码语言:javascript
复制
{KEYWORDS}
{
System.out.println("keyword is .. " + yytext());
++keywordCount;
}

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

但我要告诉你,你应该调查LEX / JFlex状态。您将检测到/*,然后转换到注释状态。当您在注释状态下检测到*/时,您将退出注释状态。

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

https://stackoverflow.com/questions/5150142

复制
相关文章

相似问题

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