Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaCC中的无语法部分_Java_Grammar_Javacc - Fatal编程技术网

javaCC中的无语法部分

javaCC中的无语法部分,java,grammar,javacc,Java,Grammar,Javacc,下面是一个简短的javaCC代码: PARSER_BEGIN(TestParser) public class TestParser { } PARSER_END(TestParser) SKIP : { " " | "\t" | "\n" | "\r" } TOKEN : /* LITERALS */ { <VOID: "void"> | <LPAR: "("> | <RPAR: ")"&

下面是一个简短的javaCC代码:

PARSER_BEGIN(TestParser)

public class TestParser
    {
    }

PARSER_END(TestParser)

SKIP :
    {
    " "
    | "\t"
    | "\n"
    | "\r"
    }

TOKEN : /* LITERALS */
{
  <VOID: "void">
| <LPAR: "("> | <RPAR: ")">
| <LBRAC: "{"> | <RBRAC: "}">
| <COMMA: ",">
| <DATATYPE: "int">
| <#LETTER: ["_","a"-"z","A"-"Z"] >
| <#DIGIT: ["0"-"9"] >
| <DOUBLE_QUOTE_LITERAL: "\"" (~["\""])*"\"" >
| <IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >
| <VARIABLE: "$"<IDENTIFIER> >
}

public void input():{} { (statement())+ <EOF> }
private void statement():{}
    {
    <VOID> <IDENTIFIER> <LPAR> (<DATATYPE> <IDENTIFIER> (<COMMA> <DATATYPE> <IDENTIFIER>)*)? <RPAR>
        <LBRAC>

        <RBRAC>
    }
无语法部分将返回一个

java.util.List<String_or_VariableReference>
java.util.List
我应该如何修改javacc解析器来处理这个部分


谢谢。

如果我正确理解了问题,您希望允许基本上任意的输入一段时间,然后切换回您的语言。如果您可以决定何时纯粹基于令牌进行切换,那么使用两种词汇状态就很容易做到这一点。使用编程语言的默认状态。当在默认状态下看到“{”时,切换到其他状态

TOKEN: { <LBRACE : "{" > : FREE } 
TOKEN:{:FREE}
在自由状态下,当看到“}”时,切换回默认状态;当看到任何其他字符时,将其传递给解析器

<FREE> TOKEN { <RBRACE : "}" > : DEFAULT }
<FREE> TOKEN { <OTHER : ~["}"] > : FREE }
TOKEN{:DEFAULT}
令牌{:FREE}
在解析器中,您可以

void freeSection() : {} { <LBRACE> (<OTHER>)* <RBRACE> }
void freeSection():{}{()*}
如果您想处理所有其他字符,请参阅常见问题解答中的问题5.2

如果您想捕获自由状态下的变量引用,例如“${i}”,您也可以访问它。加

<FREE> TOKEN { <VARREF : "${" (["a"-"Z"]|["A"-"Z"])* "}" > } 
TOKEN{}
<FREE> TOKEN { <VARREF : "${" (["a"-"Z"]|["A"-"Z"])* "}" > }