public GenericParserHelper(DslSyntax syntax, string overrideKeyword = null) { DslSyntax = syntax; ConceptType conceptType = DslSyntax.GetConceptType(typeof(TConceptInfo), overrideKeyword); GenericParser = new GenericParser(conceptType); }
public TestDslParser(string dsl, DslSyntax syntax) : base( new TestTokenizer(dsl), new Lazy <DslSyntax>(() => syntax), new ConsoleLogProvider()) { _syntax = syntax; }
public static ConceptType GetConceptType(this DslSyntax dslSyntax, Type conceptInfoType, string overrideKeyword = null) { var conceptType = dslSyntax.ConceptTypes.Single(ct => ct.AssemblyQualifiedName == conceptInfoType.AssemblyQualifiedName); if (overrideKeyword != null) { conceptType.Keyword = overrideKeyword; } return(conceptType); }
public static ConceptSyntaxNode CreateConceptSyntaxNode(this DslSyntax dslSyntax, IConceptInfo ci) { var conceptInfoType = ci.GetType(); var node = new ConceptSyntaxNode(dslSyntax.GetConceptType(conceptInfoType)); var members = ConceptMembers.Get(conceptInfoType); if (node.Parameters.Length != members.Length) { throw new InvalidOperationException( $"{nameof(ConceptSyntaxNode)} parameters count ({node.Parameters.Length})" + $" does not match {nameof(ConceptMembers)} count ({members.Length})."); } for (int m = 0; m < members.Length; m++) { object value = members[m].GetValue(ci); node.Parameters[m] = value; if (value == null) { node.Parameters[m] = null; } else if (value is string) { node.Parameters[m] = value; } else if (value is IConceptInfo referencedConceptInfo) { var referencedNode = CreateConceptSyntaxNode(dslSyntax, referencedConceptInfo); node.Parameters[m] = referencedNode; } else { var valueType = value?.GetType().Name ?? "null"; throw new ArgumentException($"Value type {valueType} is not expected in '{ci.GetUserDescription()}', parameter {members[m].Name}."); } } return(node); }