//todo: redesign nested if statements - currently are not supported public override object VisitSelectionStatement(CLanguageParser.SelectionStatementContext context) { var assignments = context .GetFirstDescendant <CLanguageParser.CompoundStatementContext>() .GetDescendants <CLanguageParser.AssignmentExpressionContext>() .Where(x => x.ChildCount > 1) .ToList(); var functionName = context .GetFunction() .GetFirstDescendant <CLanguageParser.DirectDeclaratorContext>() .GetName(); var ifStatement = new IfStatement { Context = context, Assignments = assignments, ElseStatements = context .statement() .Skip(1) .Select(x => new ElseStatement { Context = x, Assignments = assignments }) .ToList() }; DataStructure[functionName].AddIfStatement(ifStatement); return(base.VisitSelectionStatement(context)); }
public List <RelationalExpression> GetConditionRelations(CLanguageParser.SelectionStatementContext context) { List <RelationalExpression> relationalExpressions = context .expression() .GetLeafDescendants <CLanguageParser.EqualityExpressionContext>() .Select(x => (object)x.Parent) .Select(GetRelationalExpression) .ToList(); return(relationalExpressions); }
public List <RelationalExpression> GetAssignmentRelations(CLanguageParser.SelectionStatementContext context) { // TODO: partial functionality string functionName = context .GetFunction() .GetFirstDescendant <CLanguageParser.DirectDeclaratorContext>() .GetName(); IfStatement ifStatement = _dataStructure[functionName] .IfStatements .First(x => x.StartIndex == context.GetStartIndex()); List <RelationalExpression> expressions = ifStatement .Assignments .Concat(ifStatement.ElseStatements.SelectMany(x => x.Assignments)) .Select(GetRelationalExpression) .ToList(); return(expressions); }