[antlr-interest] Tree parser changes Token type?
Anakreon Mejdi
amejdi at ertonline.gr
Fri Nov 29 04:09:33 PST 2002
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/
-------------- next part --------------
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]
-------------- next part --------------
<%@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
%>
More information about the antlr-interest
mailing list