Skip to content

Commit feea138

Browse files
committed
Moved repeated expression parsing logic to a central location.
1 parent 0848d1d commit feea138

13 files changed

Lines changed: 38 additions & 38 deletions

SqlServerSimulator/Parser/Expression.cs

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,10 @@ public static Expression Parse(ParserContext context)
5858
expression = Expression.Parse(context);
5959
break;
6060
case Operator { Character: '-' }:
61-
context.MoveNextRequired();
62-
expression = Parse(context);
63-
expression = new Subtract(new Value(new DataValue(0, DataType.BuiltInDbInt32)), expression);
61+
expression = new Subtract(new Value(new DataValue(0, DataType.BuiltInDbInt32)), context);
6462
break;
6563
case Operator { Character: '(' }:
66-
context.MoveNextRequired();
67-
expression = new Parenthesized(Parse(context));
64+
expression = new Parenthesized(context);
6865
break;
6966
default:
7067
throw SimulatedSqlException.SyntaxErrorNear(context);
@@ -75,36 +72,28 @@ public static Expression Parse(ParserContext context)
7572
switch (context.GetNextOptional())
7673
{
7774
case Operator { Character: '+' }:
78-
context.MoveNextRequired();
79-
expression = new Add(expression, Parse(context));
75+
expression = new Add(expression, context);
8076
break;
8177
case Operator { Character: '-' }:
82-
context.MoveNextRequired();
83-
expression = new Subtract(expression, Parse(context));
78+
expression = new Subtract(expression, context);
8479
break;
8580
case Operator { Character: '*' }:
86-
context.MoveNextRequired();
87-
expression = new Multiply(expression, Parse(context));
81+
expression = new Multiply(expression, context);
8882
break;
8983
case Operator { Character: '/' }:
90-
context.MoveNextRequired();
91-
expression = new Divide(expression, Parse(context));
84+
expression = new Divide(expression, context);
9285
break;
9386
case Operator { Character: '%' }:
94-
context.MoveNextRequired();
95-
expression = new Modulus(expression, Parse(context));
87+
expression = new Modulus(expression, context);
9688
break;
9789
case Operator { Character: '&' }:
98-
context.MoveNextRequired();
99-
expression = new BitwiseAnd(expression, Parse(context));
90+
expression = new BitwiseAnd(expression, context);
10091
break;
10192
case Operator { Character: '|' }:
102-
context.MoveNextRequired();
103-
expression = new BitwiseOr(expression, Parse(context));
93+
expression = new BitwiseOr(expression, context);
10494
break;
10595
case Operator { Character: '^' }:
106-
context.MoveNextRequired();
107-
expression = new BitwiseExclusiveOr(expression, Parse(context));
96+
expression = new BitwiseExclusiveOr(expression, context);
10897
break;
10998

11099
case Operator { Character: '.' }:
@@ -120,10 +109,7 @@ public static Expression Parse(ParserContext context)
120109
case Operator { Character: '(' }:
121110
{
122111
if (expression is not Reference reference)
123-
{
124-
expression = new Parenthesized(Parse(context));
125112
break;
126-
}
127113

128114
context.MoveNextRequired(); // Move past (
129115
expression = ResolveBuiltIn(reference.Name, context);

SqlServerSimulator/Parser/Expressions/Add.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class Add(Expression left, Expression right) : MathExpression(left, right)
3+
internal sealed class Add(Expression left, ParserContext context) : MathExpression(left, context)
44
{
55
public override byte Precedence => 3;
66

SqlServerSimulator/Parser/Expressions/BitwiseAnd.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class BitwiseAnd(Expression left, Expression right) : BitwiseExpression(left, right)
3+
internal sealed class BitwiseAnd(Expression left, ParserContext context) : BitwiseExpression(left, context)
44
{
55
public override byte Precedence => 3;
66

SqlServerSimulator/Parser/Expressions/BitwiseExclusiveOr.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class BitwiseExclusiveOr(Expression left, Expression right) : BitwiseExpression(left, right)
3+
internal sealed class BitwiseExclusiveOr(Expression left, ParserContext context) : BitwiseExpression(left, context)
44
{
55
public override byte Precedence => 3;
66

SqlServerSimulator/Parser/Expressions/BitwiseExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal abstract class BitwiseExpression(Expression left, Expression right) : TwoSidedExpression(left, right)
3+
internal abstract class BitwiseExpression(Expression left, ParserContext context) : TwoSidedExpression(left, context)
44
{
55
protected abstract DataValue Run(DataType.BitwiseCompatibleDataType common, DataValue left, DataValue right);
66

SqlServerSimulator/Parser/Expressions/BitwiseOr.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class BitwiseOr(Expression left, Expression right) : BitwiseExpression(left, right)
3+
internal sealed class BitwiseOr(Expression left, ParserContext context) : BitwiseExpression(left, context)
44
{
55
public override byte Precedence => 3;
66

SqlServerSimulator/Parser/Expressions/Divide.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class Divide(Expression left, Expression right) : MathExpression(left, right)
3+
internal sealed class Divide(Expression left, ParserContext context) : MathExpression(left, context)
44
{
55
public override byte Precedence => 2;
66

SqlServerSimulator/Parser/Expressions/MathExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal abstract class MathExpression(Expression left, Expression right) : TwoSidedExpression(left, right)
3+
internal abstract class MathExpression(Expression left, ParserContext context) : TwoSidedExpression(left, context)
44
{
55
protected abstract DataValue Run(DataType.NumericCompatibleDataType common, DataValue left, DataValue right);
66

SqlServerSimulator/Parser/Expressions/Modulus.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class Modulus(Expression left, Expression right) : MathExpression(left, right)
3+
internal sealed class Modulus(Expression left, ParserContext context) : MathExpression(left, context)
44
{
55
public override byte Precedence => 3;
66

SqlServerSimulator/Parser/Expressions/Multiply.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace SqlServerSimulator.Parser.Expressions;
22

3-
internal sealed class Multiply(Expression left, Expression right) : MathExpression(left, right)
3+
internal sealed class Multiply(Expression left, ParserContext context) : MathExpression(left, context)
44
{
55
public override byte Precedence => 2;
66

0 commit comments

Comments
 (0)