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")); } }
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>"); }
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>"); } }