- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Thu, 17 Mar 2005 10:12:43 +0000
- To: howardk@fatdog.com
- Cc: "Thompson, Bryan B." <BRYAN.B.THOMPSON@saic.com>, ''Eric Prud'hommeaux ' ' <eric@w3.org>, public-rdf-dawg@w3.org
Howard Katz wrote:
> Bryan,
>
> It probably doesn't help you much, but I had problems with qnames in antlr
> as well in early versions of my XQuery query engine. I too hoisted QNAME
> into the parser trying to solve lexer difficulties, but if I recall
> correctly, that then allowed users to enter spaces between the prefix,
> colon, and localPart! I eventually gave up (for other reasons as well) and
> eventually moved to javacc. I'm happier now (at least my analyst tells me I
> should be).
>
> You got me curious and I went looking for antlr/QNAME productions. I've been
> away from antlr so long that the following xquery.g file from eXist just
> looks like gobbledeegook to me now. If it's useful, more power to you:
>
> qName returns [String name]
> {
> name= null;
> String name2;
> }
> :
> ( ncnameOrKeyword COLON ncnameOrKeyword )
> => name=nc1:ncnameOrKeyword COLON name2=ncnameOrKeyword
> {
> name= name + ':' + name2;
> #qName.copyLexInfo(#nc1);
> }
> |
> name=ncnameOrKeyword
> ;
>
> Howard
>
I used the same mechanism (ANTLR calls it syntactic predicates, I think) did
much the same with my N3 grammar for Jena (which is in ANTLR). This is a
genralisation of what lex-class and javacc tokenizers do.
THING
: (NSNAME COLON LNAME)=> NSNAME COLON LNAME { ... }
| (COLON LNAME)=> COLON LNAME { ... }
| (NSNAME COLON )=> NSNAME COLON { ... }
| (COLON)=> COLON
etc etc
See http://www.antlr.org/doc/lexer.html#dfacompare
Andy
Received on Thursday, 17 March 2005 10:13:08 UTC