private static void Main(string[] args) { Dictionary <string, List <string> > parsedArgs = GetCommandLineParameters(string.Join(" ", args)); if (parsedArgs.Count == 0) { PrintHelpText(); return; } string definitionFile = GetDefinitionFile(parsedArgs); string outputFolder = GetOutputFolder(parsedArgs); OutputType outputType = GetOutputType(parsedArgs); string definitionFileText; if (!string.IsNullOrEmpty(definitionFile)) { definitionFileText = File.ReadAllText(definitionFile); } else { definitionFileText = Console.In.ReadToEnd(); if (string.IsNullOrWhiteSpace(definitionFileText)) { throw new ArgumentException("A language defintion file is required."); } } try { LanguageMatcherDefinition languageMatcherModel = JsonConvert.DeserializeObject <LanguageMatcherDefinition>(definitionFileText); LanguageMatcher languageMatcher = DefinitionConverter.Convert(languageMatcherModel); MatcherClassGenerator generator = new MatcherClassGenerator(languageMatcher); if (outputType == OutputType.Assembly) { generator.OutputAssembly(outputFolder); } else if (outputFolder == "stdout") { Console.WriteLine(generator.GetClass()); } else { generator.OutputClass(outputFolder); } } catch (Exception) { throw new ArgumentException("A matcher could not be generated using the given definition file."); } }
private static Assembly GetAssembly(Language language, LanguageMatcher matcher) { lock (_assemblyMap) { if (!_assemblyMap.TryGetValue(language.ToString(), out Assembly assembly)) { MatcherClassGenerator generator = new MatcherClassGenerator(matcher); assembly = generator.GetAssembly(); _assemblyMap[language.ToString()] = assembly; } return(assembly); } }