IExpression Addition(ImmutableList <string> symbols) { var left = Multiplication(symbols); while (Match(TokenTag.Add, TokenTag.Subtract) is Token token) { var op = tokenOp[token.Tag]; var right = Multiplication(symbols); left = new OperatorBinary(token.Position, op, left, right); } return(left); }
IExpression Multiplication(ImmutableList <string> symbols) { var left = Unary(symbols); while (Match(TokenTag.Multiply, TokenTag.Divide, TokenTag.Mod) is Token token) { var op = tokenOp[token.Tag]; var right = Unary(symbols); left = new OperatorBinary(token.Position, op, left, right); } return(left); }
IExpression Relation(ImmutableList <string> symbols) { var left = Addition(symbols); while (Match(TokenTag.GreaterThan, TokenTag.GreaterThanOrEqualTo, TokenTag.LessThan, TokenTag.LessThanOrEqualTo) is Token token) { var op = tokenOp[token.Tag]; var right = Addition(symbols); left = new OperatorBinary(token.Position, op, left, right); } return(left); }