📄 treebuilder24.java
字号:
package org.python.pydev.parser.grammar24;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import org.python.pydev.parser.jython.ParseException;
import org.python.pydev.parser.jython.SimpleNode;
import org.python.pydev.parser.jython.Visitor;
import org.python.pydev.parser.jython.ast.Assert;
import org.python.pydev.parser.jython.ast.Assign;
import org.python.pydev.parser.jython.ast.Attribute;
import org.python.pydev.parser.jython.ast.AugAssign;
import org.python.pydev.parser.jython.ast.BinOp;
import org.python.pydev.parser.jython.ast.BoolOp;
import org.python.pydev.parser.jython.ast.Break;
import org.python.pydev.parser.jython.ast.Call;
import org.python.pydev.parser.jython.ast.ClassDef;
import org.python.pydev.parser.jython.ast.Compare;
import org.python.pydev.parser.jython.ast.Comprehension;
import org.python.pydev.parser.jython.ast.Continue;
import org.python.pydev.parser.jython.ast.Delete;
import org.python.pydev.parser.jython.ast.Dict;
import org.python.pydev.parser.jython.ast.Ellipsis;
import org.python.pydev.parser.jython.ast.Exec;
import org.python.pydev.parser.jython.ast.Expr;
import org.python.pydev.parser.jython.ast.Expression;
import org.python.pydev.parser.jython.ast.ExtSlice;
import org.python.pydev.parser.jython.ast.For;
import org.python.pydev.parser.jython.ast.FunctionDef;
import org.python.pydev.parser.jython.ast.Global;
import org.python.pydev.parser.jython.ast.If;
import org.python.pydev.parser.jython.ast.Import;
import org.python.pydev.parser.jython.ast.ImportFrom;
import org.python.pydev.parser.jython.ast.Index;
import org.python.pydev.parser.jython.ast.Interactive;
import org.python.pydev.parser.jython.ast.Lambda;
import org.python.pydev.parser.jython.ast.List;
import org.python.pydev.parser.jython.ast.ListComp;
import org.python.pydev.parser.jython.ast.Module;
import org.python.pydev.parser.jython.ast.Name;
import org.python.pydev.parser.jython.ast.NameTok;
import org.python.pydev.parser.jython.ast.Num;
import org.python.pydev.parser.jython.ast.Pass;
import org.python.pydev.parser.jython.ast.Print;
import org.python.pydev.parser.jython.ast.Raise;
import org.python.pydev.parser.jython.ast.Repr;
import org.python.pydev.parser.jython.ast.Return;
import org.python.pydev.parser.jython.ast.Slice;
import org.python.pydev.parser.jython.ast.Str;
import org.python.pydev.parser.jython.ast.StrJoin;
import org.python.pydev.parser.jython.ast.Subscript;
import org.python.pydev.parser.jython.ast.Suite;
import org.python.pydev.parser.jython.ast.TryExcept;
import org.python.pydev.parser.jython.ast.TryFinally;
import org.python.pydev.parser.jython.ast.Tuple;
import org.python.pydev.parser.jython.ast.UnaryOp;
import org.python.pydev.parser.jython.ast.While;
import org.python.pydev.parser.jython.ast.Yield;
import org.python.pydev.parser.jython.ast.aliasType;
import org.python.pydev.parser.jython.ast.argumentsType;
import org.python.pydev.parser.jython.ast.comprehensionType;
import org.python.pydev.parser.jython.ast.decoratorsType;
import org.python.pydev.parser.jython.ast.excepthandlerType;
import org.python.pydev.parser.jython.ast.exprType;
import org.python.pydev.parser.jython.ast.expr_contextType;
import org.python.pydev.parser.jython.ast.keywordType;
import org.python.pydev.parser.jython.ast.sliceType;
import org.python.pydev.parser.jython.ast.stmtType;
import org.python.pydev.parser.jython.ast.suiteType;
public final class TreeBuilder24 implements PythonGrammar24TreeConstants {
private JJTPythonGrammar24State stack;
private CtxVisitor ctx;
private SimpleNode lastPop;
public TreeBuilder24(JJTPythonGrammar24State stack) {
this.stack = stack;
this.ctx = new CtxVisitor();
}
private stmtType[] makeStmts(int l) {
stmtType[] stmts = new stmtType[l];
for (int i = l-1; i >= 0; i--) {
stmts[i] = (stmtType) stack.popNode();
}
return stmts;
}
private stmtType[] popSuite() {
return getBodyAndSpecials();
}
private exprType[] makeExprs() {
if (stack.nodeArity() > 0 && stack.peekNode().getId() == JJTCOMMA)
stack.popNode();
return makeExprs(stack.nodeArity());
}
private exprType[] makeExprs(int l) {
exprType[] exprs = new exprType[l];
for (int i = l-1; i >= 0; i--) {
lastPop = stack.popNode();
exprs[i] = (exprType) lastPop;
}
return exprs;
}
private NameTok makeName(int ctx) {
Name name = (Name) stack.popNode();
NameTok n = new NameTok(name.id, ctx);
n.beginColumn = name.beginColumn;
n.beginLine = name.beginLine;
addSpecials(name, n);
name.specialsBefore = n.getSpecialsBefore();
name.specialsAfter = n.getSpecialsAfter();
return n;
}
private NameTok[] makeIdentifiers(int ctx) {
int l = stack.nodeArity();
NameTok[] ids = new NameTok[l];
for (int i = l - 1; i >= 0; i--) {
ids[i] = makeName(ctx);
}
return ids;
}
private aliasType[] makeAliases() {
return makeAliases(stack.nodeArity());
}
private aliasType[] makeAliases(int l) {
aliasType[] aliases = new aliasType[l];
for (int i = l-1; i >= 0; i--) {
aliases[i] = (aliasType) stack.popNode();
}
return aliases;
}
private static SimpleNode[] nodes = new SimpleNode[PythonGrammar24TreeConstants.jjtNodeName.length];
public SimpleNode openNode(int id) {
if (nodes[id] == null)
nodes[id] = new IdentityNode(id);
return nodes[id];
}
public SimpleNode closeNode(SimpleNode n, int arity) throws Exception {
exprType value;
exprType[] exprs;
int l;
switch (n.getId()) {
case -1:
System.out.println("Illegal node");
case JJTSINGLE_INPUT:
return new Interactive(makeStmts(arity));
case JJTFILE_INPUT:
return new Module(makeStmts(arity));
case JJTEVAL_INPUT:
return new Expression(((exprType) stack.popNode()));
case JJTNAME:
Name name = new Name(n.getImage().toString(), Name.Load);
addSpecialsAndClearOriginal(n, name);
return name;
case JJTNUM:
Object[] numimage = (Object[]) n.getImage();
return new Num(numimage[0], (Integer)numimage[1], (String)numimage[2]);
case JJTUNICODE:
case JJTSTRING:
Object[] image = (Object[]) n.getImage();
return new Str((String)image[0], (Integer)image[3], (Boolean)image[1], (Boolean)image[2]);
case JJTSUITE:
stmtType[] stmts = new stmtType[arity];
for (int i = arity-1; i >= 0; i--) {
SimpleNode yield_or_stmt = stack.popNode();
if(yield_or_stmt instanceof Yield){
stmts[i] = new Expr((Yield)yield_or_stmt);
}else{
stmts[i] = (stmtType) yield_or_stmt;
}
}
return new Suite(stmts);
case JJTEXPR_STMT:
value = (exprType) stack.popNode();
if (arity > 1) {
exprs = makeExprs(arity-1);
ctx.setStore(exprs);
return new Assign(exprs, value);
} else {
return new Expr(value);
}
case JJTINDEX_OP:
sliceType slice = (sliceType) stack.popNode();
value = (exprType) stack.popNode();
return new Subscript(value, slice, Subscript.Load);
case JJTDOT_OP:
NameTok attr = makeName(NameTok.Attrib);
value = (exprType) stack.popNode();
return new Attribute(value, attr, Attribute.Load);
case JJTBEGIN_DEL_STMT:
return new Delete(null);
case JJTDEL_STMT:
exprs = makeExprs(arity-1);
ctx.setDelete(exprs);
Delete d = (Delete) stack.popNode();
d.targets = exprs;
return d;
case JJTPRINT_STMT:
boolean nl = true;
if (stack.nodeArity() == 0){
Print p = new Print(null, null, true);
p.getSpecialsBefore().add(0, "print ");
return p;
}
if (stack.peekNode().getId() == JJTCOMMA) {
stack.popNode();
nl = false;
}
Print p = new Print(null, makeExprs(), nl);
p.getSpecialsBefore().add(0, "print ");
return p;
case JJTPRINTEXT_STMT:
nl = true;
if (stack.peekNode().getId() == JJTCOMMA) {
stack.popNode();
nl = false;
}
exprs = makeExprs(stack.nodeArity()-1);
p = new Print(((exprType) stack.popNode()), exprs, nl);
p.getSpecialsBefore().add(0, ">> ");
p.getSpecialsBefore().add(0, "print ");
return p;
case JJTBEGIN_FOR_STMT:
return new For(null,null,null,null);
case JJTFOR_STMT:
suiteType orelseSuite = null;
if (stack.nodeArity() == 6){
orelseSuite = popSuiteAndSuiteType();
}
stmtType[] body = popSuite();
exprType iter = (exprType) stack.popNode();
exprType target = (exprType) stack.popNode();
ctx.setStore(target);
For forStmt = (For) stack.popNode();
forStmt.target = target;
forStmt.iter = iter;
forStmt.body = body;
forStmt.orelse = orelseSuite;
return forStmt;
case JJTBEGIN_FOR_ELSE_STMT:
return new suiteType(null);
case JJTBEGIN_ELSE_STMT:
return new suiteType(null);
case JJTBEGIN_WHILE_STMT:
return new While(null, null, null);
case JJTWHILE_STMT:
orelseSuite = null;
if (stack.nodeArity() == 5){
orelseSuite = popSuiteAndSuiteType();
}
body = popSuite();
exprType test = (exprType) stack.popNode();
While w = (While) stack.popNode();
w.test = test;
w.body = body;
w.orelse = orelseSuite;
return w;
case JJTBEGIN_IF_STMT:
return new If(null, null, null);
case JJTBEGIN_ELIF_STMT:
return new If(null, null, null);
case JJTIF_STMT:
stmtType[] orelse = null;
//arity--;//because of the beg if stmt
if (arity % 3 == 1){
orelse = getBodyAndSpecials();
}
//make the suite
Suite suite = (Suite)stack.popNode();
body = suite.body;
test = (exprType) stack.popNode();
//make the if
If last = (If) stack.popNode();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -