2011-03-01 83 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