2011-03-01 15 views
0

教授から私たちに与えられた言語用のスキャナを生成しようとしている私は、最新の課題にJLexを使用しています。JLex Scanner Generating

この時点で、次のように書かれています。キーワードと識別子の規則が、現在作業している言語に対して正しいとします。

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
をその後、キーワードに関連付けられたコードでkeywordCountをインクリメントすることができます

%{ 
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); 
} 
%} 

:あなたはmainメソッドを作成し

、あなたはまた、lexのファイルにあなたのレクサーのためのメンバ変数を作成することができます

{KEYWORDS} 
{ 
System.out.println("keyword is .. " + yytext()); 
++keywordCount; 
} 

検出のコメントは、この宿題のための主な作業のように聞こえるので、私はあなたにそれを残しておきます;)

が、私はあなたがLEX/JFlex状態になりますことを教えてくれます。/*を検出して、コメント状態に移行します。 * /を検出すると、コメント状態ではコメント状態から移行します。

+0

ありがとう、私はそれについて何か不思議だった。 JLexは、あなたがJavaをどこでやることができるか、どこでできないかについて私を混乱させますが、それは理にかなっています。 コメントについては、あなたが言及した国がおそらく目指しているものだと思います。それは必ずしも主要な仕事ではありませんが、それは「トリッキーな」パーツの1つなので、遠く離れているわけではありません。私は州を見て回ります、ありがとう! – muttley91