public override void EnterLocalVariableDeclaration([NotNull] NovaParser.LocalVariableDeclarationContext context) { VariableDeclaratorContext declarator = context.variableDeclarator(); string type = context.typeType().GetChild(0).GetText(); string name = declarator.variableDeclaratorId().GetText(); DeclarationStatement statement = new DeclarationStatement(Parent, context); Variable variable = new Variable(name, type, context.variableDeclarator()); ExpressionNode value = new ExpressionNode(statement); VariableInitializerContext initializer = declarator.variableInitializer(); if (initializer != null) { ExpressionContext expressionContext = initializer.expression(); ExpressionListener listener = new ExpressionListener(statement); expressionContext.EnterRule(listener); value = listener.GetResult(); } statement.Variable = variable; statement.Value = value; Result.Add(statement); }
public override void EnterFieldDeclaration([NotNull] NovaParser.FieldDeclarationContext context) { NovaParser.MemberDeclarationContext parent = (NovaParser.MemberDeclarationContext)context.parent; ModifiersEnum modifiers = ParserUtils.ParseModifier(parent.modifier().classModifier().GetText()); VariableDeclaratorContext declarator = context.variableDeclarator(); string type = context.typeType().GetText(); string name = declarator.variableDeclaratorId().GetText(); Field field = new Field(Class, Class.PopFieldId(), modifiers, new Variable(name, type, context.variableDeclarator())); ExpressionNode value = new ExpressionNode(field); var initializer = declarator.variableInitializer(); if (initializer != null) { ExpressionContext expressionContext = initializer.expression(); ExpressionListener listener = new ExpressionListener(field); // same here foreach (var expression in expressionContext.GetRuleContexts <ParserRuleContext>()) { expression.EnterRule(listener); } value = listener.GetResult(); } field.Value = value; Class.Fields.Add(field.Name, field); }