[antlr-interest] XPA and ANTLR

Monty Zukowski monty at codetransform.com
Wed Aug 11 19:29:00 PDT 2004


The best way I know to see that the tree parser is complete is to parse 
to a tree and then back to text and do a diff.

The only other way I could think of is to make your own node type with 
a flag for if it is visited.  Override match() to set the flag and then 
traverse the whole tree looking for any unset nodes.

Monty


On Aug 11, 2004, at 5:52 PM, ooobles wrote:

>
> Hi all,
>
> It's been a while since I've got to play with ANTLR in a new way.
> I've been happily making up new grammars for a while now. :)  I now
> have the new challenge of parsing XML. After writing a 1200line parser
> that reads over a dom4j tree, I decided there must be a better way.
> Thankfully, I found XPA and have started writing a tree walker for
> reading XML Schemas (XSD).
>
> One thing I find with tree walkers is that I can't be sure if I missed
> nodes in the tree.  A tree walker can silently skip child nodes
> because the grammar has already been met.  Is there any way to force
> the parser to report an error when additional nodes have been found in
> the tree?
>
> I've been using one of the XPA examples to write the tree parser (see
> below). It *seems* to read XSD, but I'm quite sure it is skipping
> some elements.
>
> As an aside, has anyone already written an XSD parser that generates a
>  nice internal model? :)  I'm guessing I'll need to do a few passes
> over the XSD files to resolve all the data types, groups, elements, 
> etc.
>
> Thanks,
> David.
>
> PS I read over a few other messages mentioning that there arn't many
> fans of XML here.  I'm definately not a fan either, but when you
> work in a group that only does XML, you don't get much choice. :)
>
> -------------- XSD Tree Parser ----------------
>
> class ComponentTreeParser extends TreeParser;
> options
> {
>    buildAST = true;
>    ASTLabelType = "XMLAST";
> }
>
> // enable wildcard processing for xtal and
> // set wildcard element type to "<wildcard>"
> tokens
> {
>     "<wildcard>";
> }
>
> schema : #(c:"<xsd:schema>" ( schemaImport | schemaInclude	| element |
> complexType | complexContent | groupDef )* )
>     ;
>
> schemaImport : imp:"<xsd:import>"
> 	;
>
> schemaInclude : inc:"<xsd:include>"
> 	;	
>
> groupDef: #("<xsd:group>" sequence )
> 	;
>
> annotation: #("<xsd:annotation>" documentation )
> 	;	
>
> documentation: "<xsd:documentation>"
> 	;
>
> complexType: #( "<xsd:complexType>"  ( annotation | sequence |
> attribute | simpleContent | complexContent )* )
> 	;
>
> complexContent: #( "<xsd:complxContent>" extension )
> 	;
>
> simpleContent: #( "<xsd:simpleContent>" extension )
> 	;
> 	
> extension: #( "<xsd:extension>" ( attribute | sequence ) )
> 	;
> 	
> sequence: #( "<xsd:sequence>" ( sequence | element | choice | groupRef
> )* )
> 	;
> 	
> choice: #( "<xsd:choice>" ( element | sequence )* )
> 	;	
>
> groupRef: "<xsd:group>" 	
> 	;
> 	
> attribute: #( "<xsd:attribute>" (simpleType)? )
> 	;	
> 	
> simpleType: #( "<xsd:simpleType>" restriction )	
> 	;
> 	
> restriction: #( "<xsd:restriction>" enumeration )
> 	;
> 	
> enumeration: "<xsd:enumeration>"	
> 	;
>
>
>
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
>



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



More information about the antlr-interest mailing list