我正在使用 JavaCC 构建一个复杂的解析器。有一次,我想跳过我看到的所有字符,直到我的语法中出现所需的标记......让我们以以下为例
/* bla bla bla bla bla bla bla bla */ => 我想定义一种语法,比如
<OPEN_COMMENT> SKIP ~[] until <CLOSE_COMMENT>
即使“bla”是常规标记,我也希望它是真的
谢谢你的帮助
您可以使用正则表达式来做到这一点。
您可以按如下方式定义标记和规则:
TOKEN :
{
< #DIGIT : [ "0"-"9" ] >
| < #ALPHABET: ["a" - "z"] >
| < #CAPSALPHABET: ["A" - "Z"] >
| < WORD: ( <DIGIT> | <ALPHABET> | <CAPSALPHABET>)+ >
}
String comment() :
{
Token token;
}
{
token=( <WORD> )+
{
return token.toString();
}
}
我认为这里通常的程序是使用带有 MORE 和 SKIP 或 SPECIAL_TOKEN 的词法状态。您可以在JavaCC 源代码分发附带的 Java 语法处理注释的方式中看到一个示例。