public PdlDefinitionConcatenation(PdlBlock block, PdlDefinition definition) : base(block) { Assert.IsNotNull(definition, nameof(definition)); Definition = definition; _hashCode = ComputeHashCode(); }
private PdlDefinition VisitDefinitionNode(IInternalTreeNode node) { PdlBlock block = null; PdlDefinition definition = null; for (int c = 0; c < node.Children.Count; c++) { var child = node.Children[c]; switch (child.NodeType) { case TreeNodeType.Internal: var internalNode = child as IInternalTreeNode; var symbolValue = internalNode.Symbol.Value; if (PdlGrammar.Block == symbolValue) { block = VisitBlockNode(internalNode); } else if (PdlGrammar.Definition == symbolValue) { definition = VisitDefinitionNode(internalNode); } break; } } if (definition != null) { return(new PdlDefinitionConcatenation(block, definition)); } return(new PdlDefinition(block)); }
void Block(PdlBlock block, GrammarModel grammarModel) { switch (block.NodeType) { case PdlNodeType.PdlBlockLexerRule: var blockLexerRule = block as PdlBlockLexerRule; grammarModel.LexerRules.Add(LexerRule(blockLexerRule)); break; case PdlNodeType.PdlBlockRule: var blockRule = block as PdlBlockRule; foreach (var production in Rule(blockRule.Rule)) { grammarModel.Productions.Add(production); } break; case PdlNodeType.PdlBlockSetting: var blockSetting = block as PdlBlockSetting; switch (blockSetting.Setting.SettingIdentifier.Value.ToString()) { case StartProductionSettingModel.SettingKey: grammarModel.StartSetting = StartSetting(blockSetting); break; case IgnoreSettingModel.SettingKey: var ignoreSettings = IgnoreSettings(blockSetting); for (var i = 0; i < ignoreSettings.Count; i++) { grammarModel.IgnoreSettings.Add(ignoreSettings[i]); } break; case TriviaSettingModel.SettingKey: var triviaSettings = TriviaSettings(blockSetting); for (var i = 0; i < triviaSettings.Count; i++) { grammarModel.TriviaSettings.Add(triviaSettings[i]); } break; } break; } }
public PdlDefinition(PdlBlock block) { Assert.IsNotNull(block, nameof(block)); Block = block; _hashCode = ComputeHashCode(); }