a parser in my pocket

23
A Parser in my Pocket Martin McClure ESUG 2010

Upload: esug

Post on 24-Jan-2015

741 views

Category:

Technology


7 download

DESCRIPTION

Martin McClure: A Parser in my Pocket. ESUG 2010, Barcelona, Spain

TRANSCRIPT

Page 1: A Parser in my Pocket

A Parserin myPocket

Martin McClureESUG 2010

Page 2: A Parser in my Pocket
Page 3: A Parser in my Pocket
Page 4: A Parser in my Pocket

Once upon a time...

Page 5: A Parser in my Pocket
Page 6: A Parser in my Pocket
Page 7: A Parser in my Pocket

Smalltalk PEG-Based Parsers

● Xstreams PEG parser● OMeta● PetitParser● ...?

Page 8: A Parser in my Pocket

● Grammars, PEGs● OMeta2 with Examples● Parser Combinators and PetitParser

The rest of this talk

Page 9: A Parser in my Pocket

Context-free grammars

conditional ::=

“if” cond “then” statement

| “if” cond “then” statement “else” statement

Works for generation,

but not sufficient for recognition

Page 10: A Parser in my Pocket

PEGOrdered Choice

conditional =

“if” cond “then” statement “else” statement

| “if” cond “then” statement

Makes recognition unambiguous

Page 11: A Parser in my Pocket

Example 1

File ServerIncremental Backup

Page 12: A Parser in my Pocket
Page 13: A Parser in my Pocket

time ( rsync -aHxi --numeric-ids --delete --link-dest=/mnt/backup/caboodle1/2010-08-03 /caboodle1/ /mnt/backup/caboodle1/2010-09-08 )

Page 14: A Parser in my Pocket
Page 15: A Parser in my Pocket

For more information on Ometa:

http://tinlizzie.org/ometa/http://tinlizzie.org/~awarth/ometa/ometa2.html

http://www.squeaksource.com/OMeta/

Page 16: A Parser in my Pocket

http://source.lukas-renggli.ch/petit.html

http://www.lukas-renggli.ch/blog/petitparser-1

Page 17: A Parser in my Pocket

BNFID ::= letter { letter | digit } ;

Page 18: A Parser in my Pocket

BNFID ::= letter { letter | digit } ;

Ometa2id = letter (letter | digit)*

Page 19: A Parser in my Pocket

BNFID ::= letter { letter | digit } ;

Ometa2id = letter (letter | digit)*

PetitParserid := #letter asParser ,

(#letter asParser / #digit asParser) star

Page 20: A Parser in my Pocket

id := #letter asParser ,(#letter asParser / #digit asParser) star

Page 21: A Parser in my Pocket
Page 22: A Parser in my Pocket
Page 23: A Parser in my Pocket

¿questions?Martin McClureESUG 2010