使用javacc令牌的方向

时间:2017-04-07 09:21:56

标签: javacc

我想区分多个令牌 看看我的代码。

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

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

我想使用findType()函数来查找类型 当输入“节拍”时,如何返回正确的输出?

1 个答案:

答案 0 :(得分:1)

你想要做的是添加一个return语句,如下所示:

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

请注意,您已在方法中更改了返回值定义,从void更改为String

然后,从您的主要:

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;
      }
    }

它会生成如下输出:

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