/// <summary> /// Prevents a default instance of the <see cref="ShaderParser"/> class from being created. /// </summary> /// <param name="languageData">The language data.</param> /// <param name="root">The root of the language.</param> private ShaderParser(ShaderLanguageData languageData, NonTerminal root) { LanguageData = languageData; Grammar = (ShaderGrammar)languageData.Grammar; Tokenizer = new Tokenizer(languageData); Parser = new Irony.Parsing.Parser(languageData, null, root); }
/// <summary> /// Gets the language. /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static T GetGrammar <T>() where T : ShaderGrammar, new() { ShaderLanguageData languageData; lock (LanguageDatas) { if (!LanguageDatas.TryGetValue(typeof(T), out languageData)) { languageData = new ShaderLanguageData(new T()); LanguageDatas.Add(typeof(T), languageData); } return((T)languageData.Grammar); } }
/// <summary> /// Gets the parser. /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static ShaderParser GetParser <T>(NonTerminal root = null) where T : ShaderGrammar, new() { ShaderLanguageData languageData; lock (LanguageDatas) { if (!LanguageDatas.TryGetValue(typeof(T), out languageData)) { languageData = new ShaderLanguageData(new T()); LanguageDatas.Add(typeof(T), languageData); } } return(new ShaderParser(languageData, root)); }