/// <summary> /// Parse a sequence of queries. /// Eeach query in the sequence must end with a ';'. /// Output also the individual query strings. /// </summary> public static List <Expression> ParseQueries(string query_sequence, out List <string> query_strings) { try { var input = new Antlr.Runtime.ANTLRStringStream(query_sequence); var lexer = new queryLexer(input); var tokens = new Antlr.Runtime.CommonTokenStream(lexer); var parser = new queryParser(tokens); var res = parser.Queries(); query_strings = res.Item2; return(res.Item1); } catch (Antlr.Runtime.MismatchedTokenException e) { string tok = (e.Token != null ? "'" + e.Token.Text + "'" : (e.Character >= 0 ? StringUtility.Escape((char)e.Character) : "")); string msg = "unexpected token " + tok; if (tok != "" && 0 <= e.Expecting && e.Expecting < queryParser.tokenNames.Length) { msg += string.Format(" expecting {0}", queryParser.tokenNames[e.Expecting]); } throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.FailedPredicateException e) { string msg = string.Format("unexpected '{0}' failed {1}", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString()), e.PredicateText); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.NoViableAltException e) { string msg = string.Format("unexpected '{0}' no alternatives", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString())); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.RecognitionException e) { string msg = string.Format("unexpected '{0}'", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString())); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (QueryParseException e) { throw e; } catch (Exception e) { throw new QueryParseException(1, 1, e.Message); } }
/// <summary> /// Parse a single query expression. /// </summary> public static Expression ParseQuery(string query) { try { var input = new Antlr.Runtime.ANTLRStringStream(query); var lexer = new queryLexer(input); var tokens = new Antlr.Runtime.CommonTokenStream(lexer); var parser = new queryParser(tokens); var res = parser.Query(); return res; } catch (Antlr.Runtime.MismatchedTokenException e) { string tok = (e.Token != null ? "'" + e.Token.Text + "'" : (e.Character >= 0 ? Microsoft.Automata.StringUtility.Escape((char)e.Character) : "")); string msg = "unexpected token " + tok; if (tok !="" && 0 <= e.Expecting && e.Expecting < queryParser.tokenNames.Length) msg += string.Format(" expecting {0}", queryParser.tokenNames[e.Expecting]); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.FailedPredicateException e) { string msg = string.Format("unexpected '{0}' failed {1}", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString()), e.PredicateText); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.NoViableAltException e) { string msg = string.Format("unexpected '{0}' no alternatives", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString())); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (Antlr.Runtime.RecognitionException e) { string msg = string.Format("unexpected '{0}'", (e.Token != null ? e.Token.Text : ((char)e.Character).ToString())); throw new QueryParseException(e.Line, e.CharPositionInLine + 1, msg); } catch (QueryParseException e) { throw e; } catch (Exception e) { throw new QueryParseException(1, 1, e.Message); } }