如何在JavCC中匹配0个令牌

时间:2015-03-04 17:56:54

标签: parsing grammar javacc

我在javaCC上相当新,我尝试创建一个miniJava解析器,但我不知道如何跳过语义操作。

 SKIP : /* Definition of white-space and comments here */
    {
       " "
      | "\t"
      | "\n"
      | "\r"
      | "\f"
  |  < "//" (~["\n","\r"])* ("\n"|"\r"|"\r\n") >
}

TOKEN : /* Definition of the MiniJava tokens here. */
{
  < NUM: (["0"-"9"])+ >
| < LPAREN: "(" >
| < RPAREN: ")" >
| < COMMA: "," >
| < IDENTIFIER: ["a"-"z","A"-"Z"](["a"-"z","A"-"Z","0"-"9","_"])* >

...

这是我尝试使用跳过的方法。

public void nt_FormalList() :
{}
{
    nt_Type() <IDENTIFIER> (nt_FormalRest())*
    | SKIP
}

public void nt_FormalRest() :
{}
{
    <COMMA> nt_Type() <IDENTIFIER>
}

public void nt_Type() :
{}
{
    <INT>
  | <BOOLEAN>
  | <INT> <LSQBR> <RSQBR>
  | <IDENTIFIER>
} 

1 个答案:

答案 0 :(得分:0)

我猜你不想要一个&#34;空间&#34;根本不是,你想要没有代币。在Java&#34;&#34;和&#34; &#34;都是有效的形式参数列表;不需要空间。所以我认为你想要的是

public void nt_FormalList() :
{}
{
    [ nt_Type() <IDENTIFIER> (nt_FormalRest())* ]
}

方括号表示中间的东西是可选的。