first question. are you backtracking a lot? that can cause bad error reporting liek this:
a : foo | bar ; if it's backtracking and can't match foo or bar, it'll say "can't do nothin' with first token" Ter On Nov 24, 2010, at 3:26 PM, Arthur Goldberg wrote: > Hello All > > I'm writing a parser for a fairly simple language (14 rules & 10 tokens) > that reads a description of a graph -- like this OncoPrint > <http://cbio.mskcc.org/cancergenomics-dataportal/index.do?case_set_id=gbm_3way_complete&tab_index=tab_visualize&action=Submit&genetic_profile_ids=gbm_mutations&genetic_profile_ids=gbm_cna_rae&genetic_profile_ids=gbm_mrna_zscores&case_ids=&Z_SCORE_THRESHOLD=1.0&cancer_type_id=gbm&gene_list=EGFR+ERBB2+PDGFRA+MET+KRAS+NRAS+HRAS+NF1+SPRY2+FOXO1+FOXO3+AKT1+AKT2+AKT3+PIK3R1+PIK3CA+PTEN&gene_set_choice=glioblastoma:_rtk/ras/pi3k/akt_signaling_%2817_genes%29&> > > -- of cancer data and produces a data structure that will be used to > select, organize and filter the data to be shown in the graph. Users > will enter the language on our web site. > > I have a working one-pass grammar, but after building it found that it's > very difficult to produce error messages in one pass. For example, one > might think that a failed semantic predicate would be a good place to > report an error, but that doesn't work because exceptions are not thrown > when predicates are hoisted and predicates are called multiple times as > the parser backtracks to find a parse. (See my previous message on use > of semantic predicates and hoisting > <http://www.antlr.org/pipermail/antlr-interest/2010-November/040091.html>.) > > I simply want to say things like > "Syntax error at 'xyz' at char <c> on line <l>" // when the input > syntax is wrong (I can't say "line 1:0 no viable alternative at input > 'xyz'"), and > "<input> is not a valid <type> at char <c> on line <l>" // when the > input semantics is wrong, for example when <input> should be a word that > fits a pattern that describes a genetic data type > > Therefore, I'm told that one should postpone error reporting until > later, and that I need a two pass grammar -- 1) build AST, 2) walk the > tree -- to easily and accurately report errors. I've started down that > path, and have a few productions in each grammar and a driver program > that connects them and handles bits of input. > > I think that I can report the syntax errors by overriding > public void displayRecognitionError(String[] tokenNames, > RecognitionException e) and > public String getErrorMessage(RecognitionException e, String[] > tokenNames) > in Phase 1, > > But it isn't clear how one accesses data in the AST with the tree > grammar. That is, inside the tree grammar how do I get the data I need > to produce the semantic error message above? > > Is that documented? I don't see it in The Definitive ANTLR Ref, Chap. 8 > or 10. > > Thanks & Thanksgiving > Arthur > > -- > Senior Research Scientist > Computational Biology > Memorial Sloan-Kettering Cancer Center > > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.
