我正在使用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.计算每次出现的标识符,关键字等。
发布于 2011-03-01 11:40:00
您创建了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);
}
%}然后,您可以在与关键字关联的代码中递增keywordCount:
{KEYWORDS}
{
System.out.println("keyword is .. " + yytext());
++keywordCount;
}检测评论听起来像是这个家庭作业的主要任务,所以我将把它留给你;)
但我要告诉你,你应该调查LEX / JFlex状态。您将检测到/*,然后转换到注释状态。当您在注释状态下检测到*/时,您将退出注释状态。
https://stackoverflow.com/questions/5150142
复制相似问题