Penningroth, Mark wrote:
As I said, you are trying to do the job of the lexer within the parser. WS is hidden so does not make it to the parser, but is still prsent in the input stream. You want:I am still confused. DQCON : '"' ~'"'* '"'; mdx_stmt : DQCON ; You probably need to read the wiki articles on getting started and if you have the money, buy the ANTLR book. Jim Everything I try seems to break something else.I have a grammar and a tree grammar. When I print out the tree I see the whitespace that is embedded in my string. I can't figure out what I have to do either in the tree construction, or the tree walker to get to the hidden token channel. Here is a snippet of the grammar that produces the tree grammar: mdx_statement : 'MDX(' mdxs=mdx_stmt ')' -> ^(MDX_FUNC $mdxs) ; mdx_stmt : dqcon -> dqcon; dqcon : '"' ( (~'"')=> ( ('\\')=>'\\'. | . ) )* '"'; WS : (' '|'\t'|'\n'|'\r')+ {$channel=HIDDEN;} ; When I parse something like: MDX("a g g g g g g gggggggggggggggggggggggggx") And then print the tree I see this: (MDX_FUNC " a g g g g g g gggggggggggggggggggggggggx ") In my tree grammar I have this (I left out some things, but you get the idea): @after { statements.Add($select_statement::stmt); if ($mdxs.text != null) { $select_statement::stmt.TheMDX = $mdxs.text; } } ^(MDX_FUNC mdxs=mdx_stmt) ; mdx : dqcon ; I get an empty string. I know there is something I a missing. In the debugger I see the input text. Is there a simple way I can get the string representation of the node? Thanks, Mark -----Original Message----- From: John B. Brodie [mailto:j...@acm.org] Sent: Thursday, July 02, 2009 11:54 AM To: Penningroth, Mark Cc: antlr-inter...@antlr.org Subject: Re: [antlr-interest] Question about preserving spaces in quoted strings Greetings! On Thu, 2009-07-02 at 10:35 -0400, Penningroth, Mark wrote:I have the following in my grammar: sqcon : '\'' ( options {greedy=false;} : .)* '\'' ; The intent is to get a single text node with everything between the sing quotes. When I parse 'Los Angeles' I lose the space .your sqcon rule is a Parser rule (because it begins with a lower case letter). have you tried making it a Lexer rule? by up-casing (at least) the first letter. and note that when you make it into a Lexer rule, the text of the token will include the leading and trailing quotes, so you may need to substring them away. Hope this helps -jbb 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 il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~--- |
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address