private void ParseNode(IParseTree node) { if (node is SourceElementsContext) { SourceElementsContext elementsContext = node as SourceElementsContext; SourceElementContext[] srcElements = elementsContext.sourceElement(); foreach (SourceElementContext srcElement in srcElements) { StatementContext statementContext = srcElement.statement(); VariableStatementContext varStatementContext = statementContext.variableStatement(); FunctionDeclarationContext functionContext = statementContext.functionDeclaration(); ImportStatementContext importContext = statementContext.importStatement(); ExportStatementContext exportContext = statementContext.exportStatement(); if (varStatementContext != null) { VariableDeclarationListContext variableListContex = varStatementContext.variableDeclarationList(); if (variableListContex != null) { var variables = variableListContex.children; foreach (var variable in variables) { if (variable is VariableDeclarationContext) { VariableDeclarationContext declarationContext = variable as VariableDeclarationContext; string name = declarationContext.assignable().GetText(); ObjectLiteralExpressionContext[] exps = declarationContext.GetRuleContexts <ObjectLiteralExpressionContext>(); if (exps == null || exps.Length == 0) { this.WriteKeyValue("Field", name); } else { this.WriteKeyValue("Class", name); this.WriteBeginBrace(); foreach (ObjectLiteralExpressionContext exp in exps) { ObjectLiteralContext literalContext = exp.objectLiteral(); PropertyAssignmentContext[] properties = literalContext.propertyAssignment(); foreach (PropertyAssignmentContext property in properties) { PropertyNameContext propertyNameContext = property.GetRuleContext <PropertyNameContext>(0); FunctionExpressionContext funcExpContext = property.GetRuleContext <FunctionExpressionContext>(0); bool isFunction = funcExpContext != null; string propertyName = propertyNameContext.identifierName().GetText(); this.WriteKeyValue(isFunction ? "Function" : "Property", propertyName); } } this.WriteEndBrace(); } } } } } else if (functionContext != null) { string name = functionContext.Identifier().GetText(); this.WriteKeyValue("Function", name); } else if (importContext != null) { ImportFromBlockContext fromContext = importContext.importFromBlock(); ModuleItemsContext[] moduleItems = fromContext.GetRuleContexts <ModuleItemsContext>(); foreach (ModuleItemsContext module in moduleItems) { AliasNameContext[] aliasNames = module.aliasName(); foreach (AliasNameContext aliasName in aliasNames) { string name = aliasName.identifierName().LastOrDefault().GetText(); this.WriteKeyValue("Import", name); } } } else if (exportContext != null) { DeclarationContext[] declarations = exportContext.GetRuleContexts <DeclarationContext>(); ExportFromBlockContext[] exportBlocks = exportContext.GetRuleContexts <ExportFromBlockContext>(); foreach (DeclarationContext declaration in declarations) { FunctionDeclarationContext funcContext = declaration.functionDeclaration(); if (funcContext != null) { string name = funcContext.Identifier().GetText(); this.WriteKeyValue("Export", name); } } foreach (ExportFromBlockContext exportBlock in exportBlocks) { ModuleItemsContext[] moduleItems = exportBlock.GetRuleContexts <ModuleItemsContext>(); foreach (ModuleItemsContext module in moduleItems) { AliasNameContext[] aliasNames = module.aliasName(); foreach (AliasNameContext aliasName in aliasNames) { IdentifierNameContext[] identifierNames = aliasName.identifierName(); string name = identifierNames.LastOrDefault().Identifier().GetText(); this.WriteKeyValue("Export", name); } } } } } } }
public ObjectLiteralContext objectLiteral() { ObjectLiteralContext _localctx = new ObjectLiteralContext(Context, State); EnterRule(_localctx, 4, RULE_objectLiteral); int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { State = 22; Match(CURLY_BRACE_OPEN); State = 31; _la = TokenStream.La(1); if (_la == STRING || _la == IDENTIFIER) { { State = 23; keyValuePair(); State = 28; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream, 1, Context); while (_alt != 2 && _alt != global::Antlr4.Runtime.Atn.ATN.InvalidAltNumber) { if (_alt == 1) { { { State = 24; Match(COMMA); State = 25; keyValuePair(); } } } State = 30; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream, 1, Context); } } } State = 34; _la = TokenStream.La(1); if (_la == COMMA) { { State = 33; Match(COMMA); } } State = 36; Match(CURLY_BRACE_CLOSE); } } catch (RecognitionException re) { _localctx.exception = re; ErrorHandler.ReportError(this, re); ErrorHandler.Recover(this, re); } finally { ExitRule(); } return(_localctx); }