[Pharo-project] petit parser help

Esteban Lorenzano estebanlm at gmail.com
Mon Apr 25 23:42:52 CEST 2011


Hi Lukas, all 
I'm finally working on a HTML petit parser (a very basic one, based on XML petit parser) and I have a serious problem (well... besides my complete ignorance about petit parser, he...)
I need to match this pattern: 

openTag, contents, closeTag 	(that will be something like "<html> ... </html>")
inlineTag 					(that will be something like "<br/>")
openTag 					(that will be something like "<link ...>" or "<img src='anUrl'>")

so, after try some variants... I came with this construct: 

element
	"[39]   	element	   ::=   	 EmptyElemTag | STag content ETag"
	
	^(self inlineTag / (self openTag, content, self closeTag) / self openTag)
		==> [ :nodes | ].

openTag
	^ $< asParser, qualified, whitespace optional, attributes, whitespace optional, $> asParser

inlineTag
	^ $< asParser, qualified, whitespace optional, attributes, whitespace optional, '/>' asParser

closeTag
	^'</' asParser , qualified , whitespace optional , $> asParser


so... the problem here is that the statement 

self openTag, contents, self closeTag

matchs with 

...
	<link ...>
</html>	
	
and for that reason, the resulting tree is invalid. 

So, I need a way to ensure the openTag name is equal to the closeTag name. 

How can I do that?

Cheers,
Esteban


More information about the Pharo-project mailing list