Penningroth, Mark wrote:
I am still confused.

  
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:

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

Reply via email to