public BinaryOperation(String op, Expression leftOperand, Expression rightOperand) : base("") { Operator = op; LeftOperand = leftOperand; RightOperand = rightOperand; }
public static Block Parse(String body) { var block = new Block(); var lexer = new Lexer(body); while (lexer.HasNext()) { // Conditional if (lexer.PeekToken() == "if") { lexer.SkipToken(); // Absorb if Expression condition = new Expression(lexer.ReadBlock("(", ")")); Block b = Block.Parse(lexer.ReadBlock("{", "}")); IfStatement statement = new IfStatement(condition, b); block.Statements.Add(statement); } else if(lexer.PeekToken(2) == "=") { var type = lexer.ReadToken(); var name = lexer.ReadToken(); lexer.SkipToken(); var value = lexer.ReadUntil(";"); var variableDefinition = new VariableDefinition(name, type, value); block.Statements.Add(variableDefinition); } else { string str = lexer.ReadUntil(";"); block.Statements.Add( Expression.Parse(str) ); lexer.SkipToken(); // Skip ; } } return block; }
public VariableDefinition(String name, String type, String value = "") { VariableName = name; Type = type; Value = Expression.Parse(value); }
public IfStatement(Expression condition, Block block) : base(condition, block) { }
public UnaryOperation(String op, Expression operand) : base("") { Operator = op; Operand = operand; }
public VariableReference(Expression left, Expression right) : base(".", left, right) { }
public Conditional(Expression condition, Block block) { Condition = condition; Body = block; }