gpt4 book ai didi

java - JJTree 中的 SimpleNode 子节点

转载 作者:行者123 更新时间:2023-11-29 06:06:39 24 4
gpt4 key购买 nike

我在教程中读到,当您执行类似操作时:

SimpleNode Program() #Program : {} 
{
(Class_decl())* <EOF>

{ return jjtThis; }
}

它应该创建一个继承自 SimpleNode 的 Programm 类(一旦你用 jjtree 编译),但在我的例子中它不会创建这样的类。我必须自己创建它还是我遗漏了什么?

谢谢

最佳答案

您是否首先在语法上使用了 jjtree(在 javacc 之前)?它对我很好:

文件:Test.jjt

options {
MULTI=true;
NODE_PREFIX="";
}

PARSER_BEGIN(Test)
public class Test {
public static void main(String[] args) throws Exception {
Test parser = new Test(new java.io.StringReader("class A; class B;"));
SimpleNode root = parser.Program();
root.dump("");
}
}
PARSER_END(Test)

TOKEN :
{
< CLASS : "class" >
| < SCOL : ";" >
| < ID : (["a"-"z","A"-"Z"])+ >
}

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

SimpleNode Program() #Program :
{}
{
(Class_decl())* <EOF> {return jjtThis;}
}

void Class_decl() #ClassDecl :
{}
{
<CLASS> <ID> <SCOL>
}

然后是命令:

jjtree Test.jjt
javacc Test.jj

生成以下 Java 源文件:

ClassDecl.java
JJTTestState.java
Node.java
Program.java
SimpleNode.java
TestTreeConstants.java

并且 ClassDeclProgram 都扩展了 SimpleNode:

/* Generated By:JJTree: Do not edit this line. Program.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=false,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
public
class Program extends SimpleNode {
...
}

/* Generated By:JJTree: Do not edit this line. ClassDecl.java Version 4.3 */
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=false,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
public
class ClassDecl extends SimpleNode {
...
}

编译所有源文件并运行Test类:

javac -cp . *.java
java -cp . Test

将打印:

Program
ClassDecl
ClassDecl

(即 Program 是有两个 ClassDecl child 的根)

使用 Java 编译器编译器版本 5.0 测试。

关于java - JJTree 中的 SimpleNode 子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com