2011-03-01 48 views
0

我正在使用JLex作为我们的最新作业,尝试为教授给我们的语言生成扫描仪。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

您创建的主要方法,你也可以为你创建成员变量词法分析器在lex文件:

%{ 
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的状态。你会检测一个/ *,然后转换到注释状态。当您在注释状态中检测到* /时,您将转换出注释状态。

+0

谢谢,我想知道这样的事情。 JLex把我搞糊涂了,你可以在哪里做Java,哪里做不到,但我想这很有道理。 至于评论,我想你提到的状态可能是目标。这不一定是主要任务,但它是“棘手”的部分之一,所以你不远处。我会研究各州,谢谢! – muttley91 2011-03-01 03:51:30