我正在使用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.计算每次出现的标识符,关键字等。
答案 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状态。您将检测到/ *然后转换为注释状态。当您在注释状态中检测到* /时,您将转换出注释状态。