如何在 JavCC 中匹配 0 个标记
How to match 0 tokens in JavCC
我是 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>
}
我猜您根本不想要 "space",而是您不想要代币。在 Java 中,"" 和 " " 都是有效的形式参数列表;不需要 space。所以我想你想要的是
public void nt_FormalList() :
{}
{
[ nt_Type() <IDENTIFIER> (nt_FormalRest())* ]
}
方括号表示中间的内容是可选的。
我是 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>
}
我猜您根本不想要 "space",而是您不想要代币。在 Java 中,"" 和 " " 都是有效的形式参数列表;不需要 space。所以我想你想要的是
public void nt_FormalList() :
{}
{
[ nt_Type() <IDENTIFIER> (nt_FormalRest())* ]
}
方括号表示中间的内容是可选的。