Hello,

My ultimate goal is to build a LaTeXCreole parser/filter to embed in PHP
(Drupal) so that I can more comfortably talk about mathematics....

To do this I have chosen to use the ANTLR project and its C runtime
(many thanks to both Terence and Jim).

To keep the complexity down I have chosen to manipulate AST trees in a
number of passes using tree grammars which generate trees.

My current grammar fragments work in Java, but alas the exact same
grammar files (with the obvious changes from Java to C), complain of
StringTemplate problems when building the tree grammars.

I suspect the C runtime has not been tested with many tree grammars
which generate their own trees.

SO... to help ensure the ANTLR C runtime can build tree grammars which
generate trees, *I have forked the antlr/antlr3 project on GitHub
(stephengaito/antlr3) and begun building my grammars using the most
recent 3.4.1-snapshot version.*

Unfortunately, my parser and lexer grammars no longer compile in the C
versions (when using the v3.4.1-snapshot tools).... some investigation
later and *I find that in at least three places in the
tool/src/main/resources/org/antlr/codegen/templates/C/C.stg file, there
are differences between the same file in the released v3.4 complete jar
and the gitHub version.*  None of these differences are recorded in the
gitHub version from before the v3.4 was tagged released on  July 18,
2011 until today (April 7, 2012). (I am unsure where the v3.4 released
version of this file has come from).

SO... *I have made two mini-branches on my fork of antlr3 to fix each of
the lexer and parser differences.  I have fixed both problems by
reinstating the text from the as released complete tar.*

My lexer and parser files now both compile with both the as released
v3.4 ANTLR tools and the v3.4.1-snapshot ANTLR tools taken from gitHub
(today).

(My tree grammar generation of trees investigation will continue).

*If you are interested I would be happy to post a bug/issue report* on
antlr/antlr3 issues system (it seems in-appropriate for me to post this
bug on the antlr/antlr4 version since it is not for new code).

*Alternatively I would be happy to issue pull requests.
*
Regards, 
Stephen Gaito

PS: the changes to
tool/src/main/resources/org/antlr/codegen/templates/C/C.stg are as follows:

------------------------
> @@ -2132,7 +2132,9 @@ else
>  <if(LEXER)>
>      LRECOVER();
>  <else>
> +<! use following code to make it recover inline;
>      RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_<ruleName><elementIndex>);
> +!>
>  <endif>
>      goto rule<ruleDescriptor.name>Ex;
>  }<\n>
> @@ -2143,7 +2145,10 @@ CONSTRUCTEX();
>  EXCEPTION->type         = ANTLR3_MISMATCHED_SET_EXCEPTION;
>  EXCEPTION->name         = (void *)ANTLR3_MISMATCHED_SET_NAME;
>  <if(PARSER)>
> +EXCEPTION->expectingSet = NULL;
> +<! use following code to make it recover inline;
>  EXCEPTION->expectingSet = &FOLLOW_set_in_<ruleName><elementIndex>;
> +!>
>  <endif>
>  >>
>  
> @@ -2510,7 +2515,7 @@ static const ANTLR3_INT32 
> dfa<dfa.decisionNumber>_T<i0>[] =
>   */
>  static const ANTLR3_INT32 * const dfa<dfa.decisionNumber>_transitions[] =
>  {
> -    <dfa.transitionEdgeTables:{xref|dfa<dfa.decisionNumber>_T<xref>}; 
> separator=", ", wrap="\n", null="_empty">
> +    <dfa.transitionEdgeTables:{xref|dfa<dfa.decisionNumber>_T<xref>}; 
> separator=", ", wrap="\n", null="NULL">
>  };
>  
>  <if(dfa.specialStateSTs)>
>




_______________________________________________
antlr-dev mailing list
antlr-dev@antlr.org
http://www.antlr.org/mailman/listinfo/antlr-dev

Reply via email to