Expr SubscriptExprs(Expr[] indexExprs, Expr[] dimExprs) { if (indexExprs == null) return null; if (indexExprs.Length == 1) return indexExprs[0]; // special case: single index is always OK if (indexExprs.Length < dimExprs.Length) { throw new ParseException("Not enough subscripts", indexExprs[indexExprs.Length - 1].Token); } else if (indexExprs.Length > dimExprs.Length) { throw new ParseException("Too many subscripts", indexExprs[dimExprs.Length].Token); } else // indexExprs.Length == dimExprs.Length { /* | | | ind[0] dim[1] * ind[1] + dim[2] * ind[2] + dim[3] * ind[3] + */ Expr indexExpr = indexExprs[0]; for (int i = 1; i < indexExprs.Length; ++i) { int dim = Expr.EvaluateIntConstant(dimExprs[i]); indexExpr = new BinaryExpr(null, 0xf4, indexExpr, new IntExpr(null, dim)); // mul indexExpr = new BinaryExpr(null, 0xec, indexExpr, indexExprs[i]); // add } return indexExpr; } }
public DatOrgEntry(SimpleToken orgToken, Expr orgExpr, int endLineNumber) { this.orgToken = orgToken; this.orgExpr = orgExpr; this.endLineNumber = endLineNumber; }
public ObjSymbolInfo(IdToken idToken, SimpleToken filenameToken, Expr countExpr, bool needsVarSpace) : base(idToken) { this.filenameToken = filenameToken; this.countExpr = countExpr; this.needsVarSpace = needsVarSpace; }
public void AddObjSymbol(IdToken idToken, SimpleToken filenameToken, Expr countExpr, bool needsVarSpace) { AssertUndefined(idToken); ObjSymbolInfo objSymbolInfo = new ObjSymbolInfo(idToken, filenameToken, countExpr, needsVarSpace); AddSymbolInfo(objSymbolInfo); objList.Add(objSymbolInfo); }
public DatFitEntry(SimpleToken token, Expr e) { this.token = token; this.e = e; }
public void AddDatFitEntry(SimpleToken token, Expr e) { datEntryList.Add(new DatFitEntry(token, e)); }
public void AddDatOrgEntry(SimpleToken orgToken, Expr orgExpr, int endLineNumber) { datEntryList.Add(new DatOrgEntry(orgToken, orgExpr, endLineNumber)); }
public ConverterExpr(SimpleToken token, Expr operand) : base(token) { this.operand = operand; }
public override Expr Led(Expr left) { if (CouldBeLvalue(left)) { UnaryExpr u = new UnaryExpr(this, postOpcode, left); return u; } /// Console.WriteLine("-------------"); /// left.Accept( new RPNPrintVisitor() ); /// Console.WriteLine(); /// Console.WriteLine("-------------"); throw new ParseException("bad lvalue", this); }
public CoginewtExpr(SimpleToken token, Expr e0, Expr e1, Expr e2) : base(token) { this.e0 = e0; this.e1 = e1; this.e2 = e2; }
public ConstantExpr(SimpleToken token, Expr e) : base(token) { this.e = e; }
public CaseStmt(SimpleToken token, int endLineNumber, Expr caseExpr, ArrayList matchExprListList, ArrayList matchStmtListList, ArrayList otherStmtList, ArrayList matchTokenList, ArrayList matchEndLineNumberList) : base(token, endLineNumber) { this.caseExpr = caseExpr; this.matchExprListList = matchExprListList; this.matchStmtListList = matchStmtListList; this.otherStmtList = otherStmtList; this.matchTokenList = matchTokenList; this.matchEndLineNumberList = matchEndLineNumberList; }
public CallExpr(SimpleToken objectToken, SimpleToken methodToken, Expr indexExpr, ArrayList argList) : base(methodToken) { this.objectToken = objectToken; this.indexExpr = indexExpr; this.argList = argList; }
public BinaryExpr(SimpleToken token, int opcode, Expr operand1, Expr operand2) : base(token) { this.opcode = opcode; this.operand1 = operand1; this.operand2 = operand2; }
public void AddConSymbol(IdToken idToken, Expr e) { AssertUndefined(idToken); ConSymbolInfo conSymbolInfo = new ConSymbolInfo(idToken, e); AddSymbolInfo(conSymbolInfo); conList.Add(conSymbolInfo); }
public static bool CouldBeLvalue(Expr e) { return e is IdExpr || e is VariableExpr || e is MemoryAccessExpr || e is RegisterExpr || e is SprExpr; }
public void AddDatDataEntry(int alignment, int size, Expr dataExpr, Expr countExpr, SimpleToken token) { datEntryList.Add(new DatDataEntry(alignment, size, dataExpr, countExpr, token)); }
public virtual Expr Led(Expr left) { throw new ParseException("no Led", this); }
public void AddDatInstructionEntry(IPropInstruction instruction, int cond, Expr eD, Expr eS, bool immediate, int effect, SimpleToken token, int endLineNumber) { datEntryList.Add(new DatInstructionEntry(instruction, cond, eD, eS, immediate, effect, token, endLineNumber)); }
public PairOfExpr(Expr left, Expr right) { this.left = left; this.right = right; }
public void AddDatResEntry(SimpleToken resToken, Expr e, int endLineNumber) { datEntryList.Add(new DatResEntry(resToken, e, endLineNumber)); }
public override Expr Led(Expr left) { return new BinaryExpr(this, 0xf0, left, ParseExpression(Tokenizer, 10)); }
public DatDataEntry(int alignment, int size, Expr dataExpr, Expr countExpr, SimpleToken token) { this.alignment = alignment; this.size = size; this.dataExpr = dataExpr; this.countExpr = countExpr; this.token = token; }
public override Expr Led(Expr left) { if (CouldBeLvalue(left)) { return new BinaryAssignExpr(this, Opcode, left, ParseExpression(Tokenizer, 13)); } else { throw new ParseException("bad lvalue", this); } }
public DatInstructionEntry(IPropInstruction instruction, int cond, Expr eD, Expr eS, bool immediate, int effect, SimpleToken token, int endLineNumber) { this.instruction = instruction; this.cond = cond; this.eD = eD; this.eS = eS; this.immediate = immediate; this.effect = effect; this.token = token; this.endLineNumber = endLineNumber; }
public override Expr Led(Expr left) { return new BinaryExpr(this, Opcode, left, ParseExpression(Tokenizer, Lbp)); }
public DatResEntry(SimpleToken resToken, Expr e, int endLineNumber) { this.resToken = resToken; this.e = e; this.endLineNumber = endLineNumber; }
public void AddBuiltInConSymbol(IdToken idToken, Expr e) { AssertUndefined(idToken); ConSymbolInfo conSymbolInfo = new ConSymbolInfo(idToken, e); AddSymbolInfo(conSymbolInfo); }
public ConSymbolInfo(IdToken idToken, Expr e) : base(idToken) { this.e = e; }
public UnaryExpr(SimpleToken token, int opcode, Expr operand) : base(token) { this.opcode = opcode; this.operand = operand; }