public void Visit(TimesOperator node) { builder.AppendLine($"Times"); builder.Indent(); node.Left.Accept(this); node.Right.Accept(this); builder.Outdent(); }
public void Visit(TimesOperator times) { times.Left.Accept(this); var leftOperand = tacs.Last().Result; times.Right.Accept(this); var rightOperand = tacs.Last().Result; tacs.Add(Tac.Times(leftOperand, rightOperand, MakeNewTemp())); }
public void ProcessAction(Stack <Ast> semanticStack, Symbol symbol, Token lastToken) { switch (symbol) { case Symbol.MakePlus: { var right = semanticStack.Pop(); var left = semanticStack.Pop(); var node = new PlusOperator(position: 0, left: (Expr)left, right: (Expr)right); semanticStack.Push(node); return; } case Symbol.MakeTimes: { var right = semanticStack.Pop(); var left = semanticStack.Pop(); var node = new TimesOperator(position: 0, left: (Expr)left, right: (Expr)right); semanticStack.Push(node); return; } case Symbol.MakeIdentifier: { var value = lastToken.Value; var node = new Identifier(position: 0, value: value); semanticStack.Push(node); return; } case Symbol.MakeIntegerLiteral: { var node = new IntegerLiteral(position: 0, value: lastToken.Value); semanticStack.Push(node); return; } case Symbol.MakeMakeBooleanTrueLiteral: { var node = new BooleanLiteral(position: 0, value: true); semanticStack.Push(node); return; } case Symbol.MakeMakeBooleanFalseLiteral: { var node = new BooleanLiteral(position: 0, value: false); semanticStack.Push(node); return; } default: throw new ArgumentOutOfRangeException(nameof(symbol), symbol, null); } }
public void TimesOperator_ShouldPrint() { var ast = new TimesOperator ( position: 0, left: new Identifier(0, "x"), right: new Identifier(0, "y") ); Assert.That(PrettyPrinter.ToString(ast), Is.EqualTo( @"Times Identifier(x) Identifier(y) ")); }
public void BinaryOperator_ShouldImplement_ValueEquality() { var binaryOperator = new TimesOperator ( position: 0, left: new Identifier(0, "left"), right: new Identifier(0, "right") ); Assert.That(binaryOperator.Equals(null), Is.False); Assert.That(binaryOperator.Equals(new Identifier(0, "a")), Is.False); Assert.That(binaryOperator.Equals(new TimesOperator ( position: 0, left: new Identifier(0, "wrong"), right: new Identifier(0, "right") )), Is.False); Assert.That(binaryOperator.Equals(new PlusOperator ( position: 0, left: new Identifier(0, "left"), right: new Identifier(0, "right") )), Is.False); Assert.That(binaryOperator.Equals(new TimesOperator ( position: 0, left: new Identifier(0, "left"), right: new Identifier(0, "wrong") )), Is.False); Assert.That(binaryOperator.Equals(new TimesOperator ( position: 0, left: new Identifier(0, "left"), right: new Identifier(0, "right") )), Is.True); }