- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在教程中读到,当您执行类似操作时:
SimpleNode Program() #Program : {}
{
(Class_decl())* <EOF>
{ return jjtThis; }
}
它应该创建一个继承自 SimpleNode 的 Programm 类(一旦你用 jjtree 编译),但在我的例子中它不会创建这样的类。我必须自己创建它还是我遗漏了什么?
谢谢
最佳答案
您是否首先在语法上使用了 jjtree
(在 javacc
之前)?它对我很好:
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
并且 ClassDecl
和 Program
都扩展了 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/
大家好,我的 .jjt 文件中有以下代码用于我的抽象语法树,用于检查节点是否在传递给它的文件中创建的位置,但我无法从语义检查器类访问此变量。代码如下,任何帮助将不胜感激!我已经尝试了一切,但在这个阶段
我从JavaCC“继承”了一个使用JJTree的项目实现一个简单的语言解析器。由于代码已有 5 年多了,我决定在进行任何实际开发之前将所有依赖项(包括 JavaCC)更新到最新版本。 因此,我删除了所
例如B && C 树应该像这样 (A || B) && (C)。这应该是这样的。我尝试过,但每次都额外||像这样添加 A ||乙|| && C. 这每次都会生成错误的树。 代码我这样做 LOOKAHE
我在教程中读到,当您执行类似操作时: SimpleNode Program() #Program : {} { (Class_decl())* { return jjtThis; }
我已经为一种 DSL 编写了一个 JJTree (JavaCC) 配置,它成功地标记了给定格式的文件,并在请求时转储 AST。 问题是树中的每个节点都是空的,因为我当前没有存储 token (我无法理
我使用 JavaCC 和 JJtree 编写了一个扫描器和解析器,生成一个抽象语法树,然后编写了一个 PrintVisitor 类,其中为树中的每个节点都有一个 Visitor 对象。但是,通过JJt
我是一名优秀的程序员,十分优秀!