예제 #1
0
        public override IExpression VisitCcIfBlock([NotNull] VBAConditionalCompilationParser.CcIfBlockContext context)
        {
            var ifCondTokens         = new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(context.ccIf(), _tokenStream)));
            var ifCond               = Visit(context.ccIf().ccExpression());
            var ifBlock              = Visit(context.ccBlock());
            var elseIfCodeCondBlocks = context
                                       .ccElseIfBlock()
                                       .Select(elseIf =>
                                               Tuple.Create <IExpression, IExpression, IExpression>(
                                                   new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(elseIf.ccElseIf(), _tokenStream))),
                                                   Visit(elseIf.ccElseIf().ccExpression()),
                                                   Visit(elseIf.ccBlock())))
                                       .ToList();

            IExpression elseCondTokens = null;
            IExpression elseBlock      = null;

            if (context.ccElseBlock() != null)
            {
                elseCondTokens = new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(context.ccElseBlock().ccElse(), _tokenStream)));
                elseBlock      = Visit(context.ccElseBlock().ccBlock());
            }
            var endIfTokens = new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(context.ccEndIf(), _tokenStream)));

            return(new ConditionalCompilationIfExpression(
                       ifCondTokens,
                       ifCond,
                       ifBlock,
                       elseIfCodeCondBlocks,
                       elseCondTokens,
                       elseBlock,
                       endIfTokens));
        }
예제 #2
0
 public override IExpression VisitCcConst([NotNull] VBAConditionalCompilationParser.CcConstContext context)
 {
     return(new ConditionalCompilationConstantExpression(
                new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(context, _tokenStream))),
                new ConstantExpression(new StringValue(Identifier.GetName(context.ccVarLhs().name()))),
                Visit(context.ccExpression()),
                _symbolTable));
 }
예제 #3
0
 public override IExpression VisitPhysicalLine([NotNull] VBAConditionalCompilationParser.PhysicalLineContext context)
 {
     return(new ConstantExpression(new TokensValue(ParserRuleContextHelper.GetTokens(context, _tokenStream))));
 }