Exemplo n.º 1
0
        public void Compile(string fileName, string source)
        {
            Tokens = new List <IToken>();

            RubyLexer  lexer  = null;
            RubyParser parser = null;


            var stream = new AntlrInputStream(source);

            lexer = new RubyLexer(stream);
            var token = lexer.NextToken();

            while (token.Type != RubyLexer.Eof)
            {
                Tokens.Add(token);
                token = lexer.NextToken();
            }

            lexer.Reset();
            lexer.Line = 0;
            lexer._tokenStartCharPositionInLine = 0;


            var tokenStream = new CommonTokenStream(lexer);

            parser = new RubyParser(tokenStream);
            Tree   = parser.prog();


            var walker   = new ParseTreeWalker();
            var listener = new RubyCompilerListener();

            walker.Walk(listener, Tree);

            if (listener.HasSemanticError())
            {
                throw new Exception("Semantic error", new Exception(listener.GetErrors()));
            }
            else
            {
                listener.CreateIRFile(Path.Combine(Environment.CurrentDirectory, $"test_bytecode/{fileName}.pir"));
            }
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                string inputFileName = args[0];
                if (!Path.IsPathRooted(inputFileName))
                {
                    inputFileName = Path.Combine(Environment.CurrentDirectory, inputFileName);
                }

                ICharStream input = new ANTLRFileStream(inputFileName);
                RubyLexer lexer = new RubyLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lexer);
                RubyParser parser = new RubyParser(tokens);
                parser.program();
            }
            else
                Console.Error.WriteLine("Usage: ruby <input-file>");
        }
Exemplo n.º 3
0
        public static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                string inputFileName = args[0];
                if (!Path.IsPathRooted(inputFileName))
                {
                    inputFileName = Path.Combine(Environment.CurrentDirectory, inputFileName);
                }

                ICharStream       input  = new ANTLRFileStream(inputFileName);
                RubyLexer         lexer  = new RubyLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lexer);
                RubyParser        parser = new RubyParser(tokens);
                parser.program();
            }
            else
            {
                Console.Error.WriteLine("Usage: ruby <input-file>");
            }
        }