[antlr-interest] Tree parser changes Token type?
Terence Parr
parrt at jguru.com
Fri Nov 29 09:56:46 PST 2002
Howdy. It looks like you have a problem in the lexer not the parser.
You probably reference a "Do" somewhere or don't define DO in the lexer.
Terence
On Friday, November 29, 2002, at 04:09 AM, Anakreon Mejdi wrote:
> I observed somthing really strange.
> The parser changes the type of the Token (which I verified with a
> System.out) but when the tree is printed (with ASTVisitor) the Token
> apears to have the original type.
>
> The mail has two attachments.
> The file used for testing and the output of the program.
> Here is the rule for the do statement.
> do_statement
> { boolean whileFound = false;}
> :
> d:DO^
> (
> /*
> The problem is when
> do while a < 0
> while z > 3
> .....
> wend
> ...
> loop
> can not distinguish betwen do while .. while .. wend loop
> It should be ok
> */
> options {
> warnWhenFollowAmbig = false;
> }
> :
> STATEMENT_END!
> | do_while {whileFound = true; d.setType(DO_WHILE);}
> (STATEMENT_END!)?
> )?
> (statements)*
> LOOP!
> (
> {!whileFound}? do_while {d.setType(WHILE_DO);}
> |
> )
> {
> System.out.println("DO type is:" + d.getType());
> }
> ;
>
> If interested in investigating the phainomenon I can send all the
> gramar.
>
> By.
> Anakreon
>
>
>
> Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
>
> Vbs Parser
> DO type is:67
> found obj_member:eof
> found obj_name: rs
> found not
> found obj_member:bof
> found obj_name: rs
> found not
> found and
> found obj_member:Fields
> found obj_member:Count
> found obj_name: rs
> found minus
> found obj_member:Fields
> found obj_member:Name
> found obj_name: rs
> found if and expr and statements
> ANTLR Tree Parsing RecognitionException Error:
> File Name:<AST>
> [-1:-1]
> <AST>: unexpected AST node: Do
> at gr.omadak.leviathan.asp.VbsTree.if_statement(VbsTree.java:841)
> at gr.omadak.leviathan.asp.VbsTree.statement(VbsTree.java:354)
> at gr.omadak.leviathan.asp.VbsTree.statements(VbsTree.java:1999)
> at gr.omadak.leviathan.asp.VbsTree.expr_statement(VbsTree.java:1979)
> at gr.omadak.leviathan.asp.VbsTree.if_statement(VbsTree.java:797)
> at gr.omadak.leviathan.asp.VbsTree.statement(VbsTree.java:354)
> at gr.omadak.leviathan.asp.VbsTree.start_rule(VbsTree.java:193)
> at Main2.main(Main2.java:33)
>
>
> found if and expr and statements
> found if
> AST
>
> [73]
> if [23]
> EXPR [50]
> iMode [77]
> = [51]
> 1 [61]
> if [23]
> EXPR [50]
> and [4]
> not [29]
> rs [59]
> . [63]
> eof [60]
> not [29]
> rs [59]
> . [63]
> bof [60]
> for [21]
> FOR_INIT [66]
> = [78]
> i [77]
> EXPR [50]
> 0 [61]
> to [43]
> - [90]
> rs [59]
> . [63]
> Fields [60]
> . [63]
> Count [60]
> 1 [61]
> rs [59]
> . [63]
> Fields [60]
> PARAMETERS [56]
> EXPR [50]
> i [77]
> . [63]
> Name [60]
> next [28]
> = [78]
> j [77]
> 0 [61]
> Do [9]
> While [46]
> EXPR [50]
> Not [29]
> rs [59]
> . [63]
> EOF [60]
> for [21]
> FOR_INIT [66]
> = [78]
> i [77]
> EXPR [50]
> 0 [61]
> to [43]
> - [90]
> rs [59]
> . [63]
> Fields [60]
> . [63]
> Count [60]
> 1 [61]
> rs [59]
> . [63]
> Fields [60]
> PARAMETERS [56]
> EXPR [50]
> i [77]
> next [28]
> rs [59]
> . [63]
> MoveNext [60]
> = [78]
> j [77]
> + [89]
> j [77]
> 1 [61]
>
>
> [73]
> <%@Language="VBSCript"%>
> <%
> if iMode = 1 then
> if not rs.eof and not rs.bof then
> for i=0 to rs.Fields.Count-1
> rs.Fields(i).Name
> next
> j=0
> Do While Not rs.EOF
> for i=0 to rs.Fields.Count-1
> rs.Fields(i)
> next
> rs.MoveNext()
> j=j+1
> Loop
> end if
> end if
> %>
>
>
--
Co-founder, http://www.jguru.com
Creator, ANTLR Parser Generator: http://www.antlr.org
Lecturer in Comp. Sci., University of San Francisco
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list