Greetings, I apologize if this is being received in duplicate by anyone, I originally sent it yesterday and doesn't seem to have been received by the group (not showing in the archives or the daily brief) I am having some trouble with my tree grammar and am hoping to maybe get an explanation as to what I am doing wrong. I've set up a parser grammar to generate an AST, then intend to walk that AST with a tree grammar to do the actual work. When just testing that my tree grammar properly recognizes the AST produced by the parser, I keep coming across similar problems. The output of the parser is as expected. Input:
select tbl1.col1, tbl2.col2 from Table_one tbl1 join Table_two tbl2 on col1 = col1 where tbl2.col2 = 3 order by tbl1.col1 AST Output from parser: (select (COLUMN_LIST tbl1.col1 tbl2.col2) (from (join (ALIAS (TABLE Table_one) tbl1) (ALIAS (TABLE Table_two) tbl2) (= col1 col1))) (where (= tbl2.col2 3)) (ORDER BY (COLUMN_LIST tbl1.col1))) Output of tree grammar: SybaseSqlTree.g: node from line 6:0 mismatched tree node: ORDER BY expecting <UP> Parser grammar rules producing AST: Each of the into, from, where, etc clauses produce their own subtrees. select_cmd : select_cmd_core (UNION (ALL)? select_cmd_core)+ order_by_clause? compute_clause? ->^(SELECT ^(UNION select_cmd_core+) order_by_clause? compute_clause?) | select_cmd_core order_by_clause? compute_clause?-> ^(select_cmd_core order_by_clause? compute_clause?) ; select_cmd_core: SELECT (ALL|DISTINCT)? (TOP unsigned_number_literal)? select_list_clause (into_clause)? (from_clause)? (where_clause)? (group_by_clause)? (having_clause)?-> ^(SELECT ALL? DISTINCT? ^(TOP unsigned_number_literal)? select_list_clause into_clause? from_clause? where_clause? group_by_clause? having_clause?) ; Relevant tree grammar excerpt.... select_cmd : ^(SELECT ^(UNION select_cmd_core+) order_by_clause? compute_clause?) | ^(select_cmd_core order_by_clause? compute_clause?); select_cmd_core: ^(SELECT ALL? DISTINCT? top_clause? select_list_clause into_clause? from_clause? where_clause? group_by_clause? having_clause?) ; My main confusion is that when generating a tree ^(rule_1 A B) rule_1: TOKEN C D->^(TOKEN C D) produces a tree (TOKEN C D A B) but the same when walking the tree seems to expect to find ((TOKEN C D) A B) Martin Piper IT - Enterprise Business Solutions Quad/Graphics Innovative People Redefining Print Sussex, Wisconsin 414-566-6823 phone [email protected] www.QG.com 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.
