static void Main(string[] args) { try { if (args.Length != 2) { Console.WriteLine("Need 2 arguments: <inputPath> - path to assembly source, <outputPath> - path to binary"); return; } Console.WriteLine("Opening files..."); PulsarAsmParserErrorListener parserErrorlistener = new PulsarAsmParserErrorListener(); PulsarAsmLexerErrorListener lexerErrorListener = new PulsarAsmLexerErrorListener(); using FileStream inStream = new FileStream(args[0], FileMode.Open); using FileStream outStream = new FileStream(args[1], FileMode.Create); ICharStream charStream = CharStreams.fromStream(inStream); ICharStream upper = new CaseChangingCharStream(charStream, true); PulsarAsmGrammarLexer lexer = new PulsarAsmGrammarLexer(upper); lexer.AddErrorListener(lexerErrorListener); ITokenStream tokens = new CommonTokenStream(lexer); PulsarAsmGrammarParser parser = new PulsarAsmGrammarParser(tokens) { BuildParseTree = true, }; parser.AddErrorListener(parserErrorlistener); Console.WriteLine("Parsing..."); var tree = parser.asm_file(); if (lexerErrorListener.WasError) { if (lexerErrorListener.Exception != null) { throw lexerErrorListener.Exception; } else { throw new InvalidOperationException("Lexer failed"); } } if (parserErrorlistener.WasError) { if (parserErrorlistener.Exception != null) { throw parserErrorlistener.Exception; } else { throw new InvalidOperationException("Parser failed"); } } PulsarAsmCodeGenerator l = new PulsarAsmCodeGenerator(); ParseTreeWalker.Default.Walk(l, tree); Console.WriteLine("Emitting binary..."); l.EmitBinary(outStream); Console.WriteLine("Done"); } catch (Exception e) { Console.WriteLine(e); } }
public static TSqlParser GetParser(string sql) { var stream = new AntlrInputStream(sql); var caseInsensitiveStream = new CaseChangingCharStream(stream, upper: true); TSqlLexer lexer = new TSqlLexer(caseInsensitiveStream); var tokenStream = new CommonTokenStream(lexer); return(new TSqlParser(tokenStream)); }
/// <summary> /// Parses the TSQL. /// </summary> /// <param name="input">The input.</param> /// <param name="listener">The listener.</param> private static void ParseTSQL(string input, IParseTreeListener listener) { ICharStream Stream = CharStreams.fromstring(input); Stream = new CaseChangingCharStream(Stream); ITokenSource Lexer = new TSqlLexer(Stream, TextWriter.Null, TextWriter.Null); ITokenStream Tokens = new CommonTokenStream(Lexer); TSqlParser Parser = new TSqlParser(Tokens, TextWriter.Null, TextWriter.Null) { BuildParseTree = true }; IParseTree tree = Parser.tsql_file(); ParseTreeWalker.Default.Walk(listener, tree); }
private TableInfo GetTableInfo(string script) { var input = new AntlrInputStream(script); var caseChangingStream = new CaseChangingCharStream(input, true); var lexer = new TSqlLexer(caseChangingStream); var tokens = new CommonTokenStream(lexer); var parser = new TSqlParser(tokens); var tree = parser.tsql_file(); var walker = new ParseTreeWalker(); var listener = new SqlListener(); walker.Walk(listener, tree); return(listener.TableInfo); }