Top Banner
1 PetitParser Compiler Jan Kurš & Jan Vraný Mohammad Ghafari, Mircea Lungu and Oscar Nierstrasz
24

Optimizing Parser Combinators

Feb 10, 2017

Download

Software

ESUG
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Optimizing Parser Combinators

1

PetitParser CompilerJan Kurš & Jan Vraný

Mohammad Ghafari, Mircea Lungu and

Oscar Nierstrasz

Page 2: Optimizing Parser Combinators

2

Page 3: Optimizing Parser Combinators

3

Parsing Contexts

Bounded Seas

Furthest Failure

Layout-senstivity

Page 4: Optimizing Parser Combinators

4

Page 5: Optimizing Parser Combinators

5

Page 6: Optimizing Parser Combinators

6

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 7: Optimizing Parser Combinators

7

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 8: Optimizing Parser Combinators

8

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 9: Optimizing Parser Combinators

9

id ← #letter #word*

expr ← term /‘(‘ expr ‘)’ /…

Page 10: Optimizing Parser Combinators

10

id ← #letter #word*

expr ← term /‘(‘ expr ‘)’ /…

Page 11: Optimizing Parser Combinators

11

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 12: Optimizing Parser Combinators

12

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 13: Optimizing Parser Combinators

13

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 14: Optimizing Parser Combinators

14

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 15: Optimizing Parser Combinators

15

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 16: Optimizing Parser Combinators

16

Page 17: Optimizing Parser Combinators

17

id ← #letter #word*

block ← #INDENT expr / block /

… #DEDENT

expr ← term /‘(‘ expr ‘)’ /…

Page 18: Optimizing Parser Combinators

18

PetitParserCompiler

Page 19: Optimizing Parser Combinators

19

10k methods of Pharo code

3 parsers

Compared to Compiled PetitParser

Speedup

Page 20: Optimizing Parser Combinators

20PetitParser SmaCC RBParser

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

Page 21: Optimizing Parser Combinators

21Expressions Python Smalltalk Java Ruby

0

2

4

6

8

10

12

14

Page 22: Optimizing Parser Combinators

22

PetitParser SmaCC RBParser0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

Compiler

Page 23: Optimizing Parser Combinators

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: Optimizing Parser Combinators

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