public void TestEatDeclarationWithAssignment() { Token tmpToken; ILineContext tmpContext; List<Token> tokens = new List<Token>(); tmpToken = new Token(Global.DataType.VAR); tmpToken.value = "var"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.IDENTIFIER); tmpToken.value = "a"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.OPERATOR); tmpToken.value = "="; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.INT); tmpToken.value = "3"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.OPERATOR); tmpToken.value = "+"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.INT); tmpToken.value = "2"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.ENDSTATEMENT); tokens.Add(tmpToken); List<ILineContext> context = new List<ILineContext>(); for (int i = 0; i < 7; i++) { tmpContext = new LineContext(1, 1); context.Add(tmpContext); } SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer(); TestVisitor testVisitor = new TestVisitor(); Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64); /*Assert.AreEqual(Global.ASTType.VAR_DECLARATION, result.GetChildren()[0].GetType()); Assert.AreEqual("a", result.GetChildren()[0].GetName()); Assert.AreEqual(Global.ASTType.ASSIGNMENT, result.GetChildren()[1].GetType());*/ }
public void TestEatDeclarationWithoutType() { Token tmpToken; ILineContext tmpContext; List<Token> tokens = new List<Token>(); tmpToken = new Token(Global.DataType.VAR); tmpToken.value = "var"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.IDENTIFIER); tmpToken.value = "a"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.ENDSTATEMENT); tokens.Add(tmpToken); List<ILineContext> context = new List<ILineContext>(); for (int i = 0; i < 3; i++) { tmpContext = new LineContext(1, 1); context.Add(tmpContext); } SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer(); Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64); }
public void TestExpressionPlus() { Token tmpToken; ILineContext tmpContext; List<Token> tokens = new List<Token>(); tmpToken = new Token(Global.DataType.VAR); tmpToken.value = "var"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.IDENTIFIER); tmpToken.value = "a"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.OPERATOR); tmpToken.value = "="; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.INT); tmpToken.value = "3"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.OPERATOR); tmpToken.value = "+"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.INT); tmpToken.value = "2"; tokens.Add(tmpToken); tmpToken = new Token(Global.DataType.ENDSTATEMENT); tokens.Add(tmpToken); List<ILineContext> context = new List<ILineContext>(); for (int i = 0; i < 7; i++) { tmpContext = new LineContext(1, 1); context.Add(tmpContext); } SyntaxAnalyzer syntaxAnalyer = new SyntaxAnalyzer(); TestVisitor testVisitor = new TestVisitor(); Base result = syntaxAnalyer.CheckSyntax(tokens, context, Global.InstructionSets.X86_64); Assert.AreEqual(new VarDeclaration(null).GetType(), result.Children[0].GetType()); Assert.AreEqual("a", ((VarDeclaration)result.Children[0]).Name.Name); Assert.AreEqual(new Assignment(null).GetType(), result.Children[1].GetType()); Assert.AreEqual("a", ((Assignment) result.Children[1]).LHS.Name); Assert.AreEqual(new PlusExp(null, null, null).GetType(), ((Assignment)result.Children[1]).RHS.GetType()); Assert.AreEqual(new Int64Literal(null, null).GetType(), ((PlusExp)((Assignment)result.Children[1]).RHS).e1.GetType()); Assert.AreEqual(new Int64Literal(null, null).GetType(), ((PlusExp)((Assignment)result.Children[1]).RHS).e2.GetType()); Assert.AreEqual("3", ((Int64Literal) ((PlusExp) ((Assignment)result.Children[1]).RHS).e1).Value); Assert.AreEqual("2", ((Int64Literal)((PlusExp)((Assignment)result.Children[1]).RHS).e2).Value); }
private ASTType getASTTypeFromToken(Token token, ILineContext context) { switch (token.type) { case Global.DataType.BOOLTYPE: return new BoolType(); case Global.DataType.CHARACTERTYPE: return new CharType(); case Global.DataType.DOUBLETYPE: return new DoubleType(); case Global.DataType.FLOATTYPE: return new FloatType(); case Global.DataType.INT16TYPE: return new Int16Type(); case Global.DataType.INT32TYPE: return new Int32Type(); case Global.DataType.INT64TYPE: return new Int64Type(); case Global.DataType.INT8TYPE: return new Int8Type(); case Global.DataType.STRINGTYPE: return new StringType(); case Global.DataType.UINT16TYPE: return new UInt16Type(); case Global.DataType.UINT32TYPE: return new UInt32Type(); case Global.DataType.UINT64TYPE: return new UInt64Type(); case Global.DataType.UINT8TYPE: return new UInt8Type(); case Global.DataType.OBOOLTYPE: return new BoolType(true); case Global.DataType.OCHARACTERTYPE: return new CharType(true); case Global.DataType.ODOUBLETYPE: return new DoubleType(true); case Global.DataType.OFLOATTYPE: return new FloatType(true); case Global.DataType.OINT16TYPE: return new Int16Type(true); case Global.DataType.OINT32TYPE: return new Int32Type(true); case Global.DataType.OINT64TYPE: return new Int64Type(true); case Global.DataType.OINT8TYPE: return new Int8Type(true); case Global.DataType.OSTRINGTYPE: return new StringType(true); case Global.DataType.OUINT16TYPE: return new UInt16Type(true); case Global.DataType.OUINT32TYPE: return new UInt32Type(true); case Global.DataType.OUINT64TYPE: return new UInt64Type(true); case Global.DataType.OUINT8TYPE: return new UInt8Type(true); default: Swift.error(new UnknownTypeException(context.Line, context.Pos)); return null; } }
private Exp BinaryExpression(Token op, Exp lhs, Exp rhs, ILineContext con) { switch (op.value) { case "&&": return new AndExp(null, lhs, rhs); case "&": return new BitwiseAndExp(null, lhs, rhs); case "<<": return new BitwiseLeftShiftExp(null, lhs, rhs); case "~": return new BitwiseNotExp(null, lhs, rhs); case "|": return new BitwiseOrExp(null, lhs, rhs); case ">>": return new BitwiseRightShiftExp(null, lhs, rhs); case "^": return new BitwiseXorExp(null, lhs, rhs); case "/": return new DivisionExp(null, lhs, rhs); case "!": return new ExclamationExp(null, lhs, rhs); case "-": return new MinusExp(null, lhs, rhs); case "%": return new ModuloExp(null, lhs, rhs); case "*": return new MultiplicationExp(null, lhs, rhs); case "||": return new OrExp(null, lhs, rhs); case "&+": return new OverflowAddExp(null, lhs, rhs); case "&*": return new OverflowMultExp(null, lhs, rhs); case "&-": return new OverflowSubExp(null, lhs, rhs); case "+": return new PlusExp(null, lhs, rhs); } Swift.error(new UnknownOperatorException(con, "The operator \"" + op.value + "\" is unknown")); return null; }