private Expression ParseLogicalExpression() { Expression left = ParseEqualityExpression(); while (IsLogicalOperator()) { var op = ParseBinaryOperator(); var right = ParseEqualityExpression(); left = new BinaryExpression(CreateSpan(left), left, right, op); statm.Add(left); } return(left); }
protected void VisitBinary(BinaryExpression expression) { switch (expression.Operator) { case BinaryOperator.Assign: VisitAssignment(expression); break; case BinaryOperator.Equal: case BinaryOperator.GreaterThan: case BinaryOperator.GreaterThanOrEqual: case BinaryOperator.LessThanOrEqual: case BinaryOperator.NotEqual: VisitLogical(expression); break; } }
void CreateVariable(SyntaxNode node) { BinaryExpression binExpr = (BinaryExpression)node; if (variable.ContainsKey(((IdentifierExpression)binExpr.Left).Identifier)) { variable.Remove(((IdentifierExpression)binExpr.Left).Identifier); } if (binExpr.Right.Kind == SyntaxKind.ConstantExpression) { variable.Add(((IdentifierExpression)binExpr.Left).Identifier, ((ConstantExpression)binExpr.Right).Value); } if (binExpr.Right.Kind == SyntaxKind.IdentifierExpression) { variable.Add(((IdentifierExpression)binExpr.Left).Identifier, ((IdentifierExpression)binExpr.Right).Identifier); } }
private Expression ParseAssignmentExpression() { // Console.WriteLine($" start in assign"); Expression left = ParsePrimaryExpression(); Token lasts = last; if (IsAssignmentOperator()) { // Assignment is right-associative. var op = ParseBinaryOperator(); Expression right = ParseAssignmentExpression(); // Console.WriteLine($"in assign"); BinaryExpression b = new BinaryExpression(CreateSpan(left), left, right, op); statm.Add(b); return(b); } return(left); }
// protected abstract void VisitArithmetic(BinaryExpression expression); protected abstract void VisitAssignment(BinaryExpression expression);
protected abstract void VisitLogical(BinaryExpression expression);