Exemplo n.º 1
0
        public static List <string> getFnames(string query)
        {
            IParseTree tree;
            string     querynospaces = query.Replace(" ", "");

            if (parseTrees.ContainsKey(querynospaces))
            {
                tree = parseTrees[querynospaces];
            }
            else
            {
                AntlrInputStream  inputStream       = new AntlrInputStream(query);
                LanguageLexer     lexer             = new LanguageLexer(inputStream);
                CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
                LanguageParser    parser            = new LanguageParser(commonTokenStream);
                parser.BuildParseTree = true;

                parser.AddErrorListener(new CommandErrorListener());

                tree = parser.command();
                parseTrees[querynospaces] = tree;
            }

            ParseTreeWalker walker = new ParseTreeWalker();

            FNameListener listener = new FNameListener();


            walker.Walk(listener, tree);

            return(listener.fnames);
        }
Exemplo n.º 2
0
        ProgramNode ParseModule(ModulePath?path, SourceText source, SyntaxContext context)
        {
            var msg = path != null ? $" with path '{path}'" : string.Empty;

            if (!_loading.Add(source.FullPath))
            {
                throw new ModuleLoadException($"Module{msg} could not be loaded due to circular 'use' declarations.");
            }

            try
            {
                if (context.Parses.ContainsKey(source.FullPath))
                {
                    throw new ModuleLoadException($"Module{msg} was already loaded previously.");
                }

                var lex   = LanguageLexer.Lex(source);
                var parse = LanguageParser.Parse(lex, SyntaxMode.Normal);

                context.AddParse(source.FullPath, parse);

                foreach (var diag in lex.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                foreach (var diag in parse.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                var analysis = LanguageAnalyzer.Analyze(parse, this, context);

                foreach (var diag in analysis.Diagnostics)
                {
                    context.AddDiagnostic(diag);
                }

                return(analysis.IsSuccess ? (ProgramNode)parse.Tree : throw new ModuleLoadException(
                           $"Module{msg} failed to load due to syntax and/or semantic errors."));
            }
            finally
            {
                _ = _loading.Remove(source.FullPath);
            }
        }
Exemplo n.º 3
0
 static void Main(string[] args)
 {
     if (args.Length < 2)
     {
         return;
     }
     using (StreamReader fin = new StreamReader(args[0]))
     {
         var lexer   = new LanguageLexer(fin);
         var parser  = new LanguageParser(lexer);
         var program = parser.program();
         using (StreamWriter fout = new StreamWriter(args[1]))
         {
             fout.WriteLine("public class Program2 \r\n {");
             fout.WriteLine(program.res);
             fout.WriteLine("}");
         }
     }
     Console.WriteLine(new Program2().isPrime(239));
     Console.ReadLine();
 }
 public LanguageParser(LanguageLexer lexer) : base(lexer)
 {
 }
Exemplo n.º 5
0
        int Run(Options options)
        {
            ReadLine.AutoCompletionHandler = null;

            var loader = new StandardModuleLoader(ModuleLoaderMode.Interactive);
            var i      = 0;

            while (true)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write($"flare({i})> ");
                Console.ResetColor();

                var text      = new StringBuilder();
                var quit      = false;
                var continued = false;

                while (true)
                {
                    var input = ReadLine.Read();

                    if (input != string.Empty)
                    {
                        ReadLine.AddHistory(input);
                    }

                    var broken = false;

                    if (input == "'repl:quit")
                    {
                        quit = true;
                        break;
                    }
                    if (continued && input == "'repl:break")
                    {
                        broken = true;
                    }
                    else
                    {
                        _ = text.AppendLine(input);
                    }

                    var lex = LanguageLexer.Lex(StringSourceText.From("<repl>", text.ToString()));

                    foreach (var diag in lex.Diagnostics)
                    {
                        LogDiagnostic(diag);
                    }

                    if (!lex.IsSuccess)
                    {
                        break;
                    }

                    var parse = LanguageParser.Parse(lex, SyntaxMode.Interactive);

                    if (!broken && IsIncomplete(parse))
                    {
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.Write($".....({i})> ");
                        Console.ResetColor();

                        continued = true;

                        continue;
                    }

                    foreach (var diag in parse.Diagnostics)
                    {
                        LogDiagnostic(diag);
                    }

                    var analysis = LanguageAnalyzer.Analyze(parse, loader, new SyntaxContext());

                    foreach (var diag in analysis.Diagnostics)
                    {
                        LogDiagnostic(diag);
                    }

                    break;
                }

                if (quit)
                {
                    break;
                }

                i++;
            }

            return(0);
        }