2017-04-07 6 views
0

複数のトークンを区別したい。
私のコードを見てください。使用方法javaccトークン

TOKEN : 
{ 
    < LOOPS : 
    <BEAT> 
    | <BASS> 
    | <MELODY> 
    > 
| < #BEAT : "beat" > 
| < #BASS : "bass" > 
| < #MELODY : "melody" > 
} 

void findType(): 
{Token loops;} 
{ 
loops = <LOOPS> 
{ String type = loops.image; } 

タイプを見つけるためにfindType()関数を使用します。
入力が「ビート」のときに正しい出力を返すにはどうすればよいですか?あなたが何をしたいか

答えて

1

はこのように、return文を追加することです:

String findType(): 
{Token loops;} 
{ 
    loops = <LOOPS> 
    { 
     String type = loops.image; 
     return type; 
    } 
} 

あなたは voidから Stringに、この方法では、戻り値の定義を変更した心を持っています。

次に、メインから:

Reading from standard input... 
Enter loop:bass 
Type is: bass 
Reading from standard input... 
Enter loop:beat 
Type is: beat 
+0

ごめんなさい:

ExampleGrammar parser = new ExampleGrammar(System.in); while (true) { System.out.println("Reading from standard input..."); System.out.print("Enter loop:"); try { String type = ExampleGrammar.findType(); System.out.println("Type is: " + type); } catch (Exception e) { System.out.println("NOK."); System.out.println(e.getMessage()); ExampleGrammar.ReInit(System.in); } catch (Error e) { System.out.println("Oops."); System.out.println(e.getMessage()); break; } } 

はそれはのような出力を生成します。 私は簡単に書きましたので、間違って書きました。 関数の戻り値はすでに文字列です 私が気にかけているのは、トークンの定義です。 上記のように 'LOOPS'を定義した場合、戻り値は出ませんでした。 –

関連する問題