Page 1
1
PetitParser CompilerJan Kurš & Jan Vraný
Mohammad Ghafari, Mircea Lungu and
Oscar Nierstrasz
Page 3
3
Parsing Contexts
Bounded Seas
Furthest Failure
Layout-senstivity
Page 6
6
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 7
7
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 8
8
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 9
9
id ← #letter #word*
expr ← term /‘(‘ expr ‘)’ /…
Page 10
10
id ← #letter #word*
expr ← term /‘(‘ expr ‘)’ /…
Page 11
11
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 12
12
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 13
13
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 14
14
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 15
15
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 17
17
id ← #letter #word*
block ← #INDENT expr / block /
… #DEDENT
expr ← term /‘(‘ expr ‘)’ /…
Page 18
18
PetitParserCompiler
Page 19
19
10k methods of Pharo code
3 parsers
Compared to Compiled PetitParser
Speedup
Page 20
20PetitParser SmaCC RBParser
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
Page 21
21Expressions Python Smalltalk Java Ruby
0
2
4
6
8
10
12
14
Page 22
22
PetitParser SmaCC RBParser0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
Compiler
Page 23
23
map:
Plusprogram
TokenclassToken
TokenidToken
Sequencebody
Actionclass
Sequenceidentifier
Sequence
ClassNode new id: idToken value body: body
CharClass#letter
ChoiceletterOrDigit
CharClass#digit
Star
… Indentindent
Star Dedentdedent
Choice
Actionmethod
…
Page 24
24
0
0.2
0.4
0.6
0.8
1
1.2Ti
me [
mic
rose
conds]
Time per Character of Smalltalk
Compiled ParserGC time