コード例 #1
0
        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.");
            }
        }
コード例 #2
0
 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);
     }
 }