variability-aware parsing -- oopsla talk

51
Variability-Aware Parsing in the Presence of Lexical Macros and Conditional Compilation Christian Kästner Paolo G. Giarrusso Tillmann Rendel Sebastian Erdweg Klaus Ostermann Thorsten Berger

Upload: chk49

Post on 09-Jul-2015

181 views

Category:

Technology


0 download

DESCRIPTION

OOPSLA 2011 talk about variability-aware parsing (i.e., parsing C code without preprocessing it first) Corresponding paper: http://www.informatik.uni-marburg.de/~kaestner/oopsla11_typechef.pdf

TRANSCRIPT

Page 1: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware Parsingin the Presence of

Lexical Macros and Conditional Compilation

Christian Kästner

Paolo G. Giarrusso

Tillmann Rendel

Sebastian Erdweg

Klaus Ostermann

Thorsten Berger

Page 2: Variability-Aware Parsing -- OOPSLA Talk

Parsing C Codewithout Preprocessing

Christian Kästner

Paolo G. Giarrusso

Tillmann Rendel

Sebastian Erdweg

Klaus Ostermann

Thorsten Berger

Page 3: Variability-Aware Parsing -- OOPSLA Talk

Viewer Discretion Is Advised

Page 4: Variability-Aware Parsing -- OOPSLA Talk
Page 5: Variability-Aware Parsing -- OOPSLA Talk

LinuxKernel

Page 6: Variability-Aware Parsing -- OOPSLA Talk

10,000 features, 6 million lines of C code

Page 7: Variability-Aware Parsing -- OOPSLA Talk

Parse and Type checkall configurations of the

entire Linux kernel

10,000 features, 6 million lines of C code

Page 8: Variability-Aware Parsing -- OOPSLA Talk

AST with

Variability Informationtrue -> (WORLD v BYE)

¬ (WORLD ˄BYE)

greet.c

printf

msg

VWORLD VBYEprintf

msg msg

main

ε ε

Page 9: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware AnalysisType SystemStatic AnalysisBug FindingTestingModel CheckingTheorem Proving…

Page 10: Variability-Aware Parsing -- OOPSLA Talk

Parsing Cwithout Preprocessing

Page 11: Variability-Aware Parsing -- OOPSLA Talk

greet.c

printf

msg

VWORLD VBYE+ printf

+ msg + msg

+ main

ε ε

???

Macro expansion needed for parsing Alternative macros

Undisciplined annotations

Page 12: Variability-Aware Parsing -- OOPSLA Talk
Page 13: Variability-Aware Parsing -- OOPSLA Talk
Page 14: Variability-Aware Parsing -- OOPSLA Talk

Previous Solutions

Disciplined SubsetRequires Code Preparation

Heuristics and Partial AnalysisInaccurate, False Positives

Brute ForceInfeasible Effort

Page 15: Variability-Aware Parsing -- OOPSLA Talk

TypeChef

Variability-Aware

Parser-Framework

+

* VA

2 43 5

Variability-Aware

Parser

Variability-Aware

Analysis

https://github.com/ckaestne/TypeChef

Variability-Aware

Lexer

(2

*3

)+

4A5¬A

Page 16: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware Lexer

(2

*3

)

Page 17: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware Lexer

Page 18: Variability-Aware Parsing -- OOPSLA Talk

0 included header files per C file

0 macros per C file

0 conditional macros per C file

0 token per C file

0 % conditional

35385901387

33549072

X862.6.33.3

Page 19: Variability-Aware Parsing -- OOPSLA Talk

2 * 3 + 4A 5¬A

+

* VA

2 43 5

Variability-Aware Parsing

( )

Page 20: Variability-Aware Parsing -- OOPSLA Talk

Undisciplined Annotations

* (A 3 4 )A

+

*

VA

2

4

3

2 +

*

+

3

2

4

Page 21: Variability-Aware Parsing -- OOPSLA Talk

Partial Errors

* (A 3 4 )

Parse Error

VA2 +

*

+

3

2

4

Expected + or EOF, but found ) at 1:7

Page 22: Variability-Aware Parsing -- OOPSLA Talk

3 + 4A 4¬A B˄ +¬A B˄ 6¬A( (¬A )¬A )

true

Page 23: Variability-Aware Parsing -- OOPSLA Talk

3 + 4A 4¬A B˄ +¬A B˄ 6¬A( (¬A )¬A )

true

Page 24: Variability-Aware Parsing -- OOPSLA Talk

3 + 4A 4¬A B˄ +¬A B˄ 6¬A( (¬A )¬A )

true3

Page 25: Variability-Aware Parsing -- OOPSLA Talk

3 + 4A 4¬A B˄ +¬A B˄ 6¬A( (¬A )¬A )

true3

Page 26: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A B˄ +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

3

Page 27: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A B˄ +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 28: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A B˄ +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Next Token:

ctx -> tok: Consumectx ->¬tok: Skipelse: Split (ctx ˄pc) and (ctx ˄ ¬pc)

Page 29: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 30: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 31: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

+¬A B˄ 6¬A3

Page 32: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 33: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 34: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )¬A4¬A B˄ +¬A B˄ 6¬A )

¬A

4

3

Page 35: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4¬A B˄ +¬A B˄ 6¬A

4¬A B˄ +¬A B˄ 6¬A )¬A )

¬A˄B

4

3

Page 36: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4

4¬A B˄ +¬A B˄ 6¬A

4¬A B˄ +¬A B˄ 6¬A )¬A )

¬A˄B

4

3

Page 37: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4

4¬A B˄ +¬A B˄ 6¬A

4¬A B˄ +¬A B˄ 6¬A )¬A )

¬A˄B

4

3

Page 38: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4¬A B˄ +¬A B˄ 6¬A

4¬A B˄ +¬A B˄ 6¬A )¬A )

¬A˄B

+

64

4

3

Page 39: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A )¬A )

¬A˄B

4

3 +

64

Page 40: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A )¬A )

¬A˄B

4

3 +

64

Page 41: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A

)¬A )

¬A˄¬B

4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A )¬A )

¬A˄B

6

4

3 +

64

Page 42: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A

)¬A

¬A

4

+

64

VB

6

3

Page 43: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A )

A

4A (¬A )4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A

)¬A

¬A

+

64

VB

6

4

3

Page 44: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A

4A (¬A

4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A

)¬A

+

64

VB

6

)

4

VA

true3

Page 45: Variability-Aware Parsing -- OOPSLA Talk

3 +

4A 4¬A˄B +¬A B˄ 6¬A

(

(¬A )¬A

4A (¬A

4¬A B˄ +¬A B˄ 6¬A

4¬A˄B +¬A B˄ 6¬A

)¬A

+

64

VB

6

)

true

4

VA

+

3

Page 46: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware

Parser Combinator Libraryfor Scala

Page 47: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware Parsers

GNU C + cpp Java + Antenna

Page 48: Variability-Aware Parsing -- OOPSLA Talk

X862.6.33.3

Parsing Linux

Variability in Build System (kbuild)and with #ifdef

Variability Model (kconfig)

Page 49: Variability-Aware Parsing -- OOPSLA Talk

0 C files (x86)

0 seconds per file (median)

0 hours total

0 % overhead (undiscipl.)

0

0 syntax errors

76653085

4.1

0X862.6.33.3

Page 50: Variability-Aware Parsing -- OOPSLA Talk

Variability-AwareParserType SystemModule SystemStatic AnalysisBug FindingTestingModel CheckingTheorem ProvingEditor SupportCode Transform.…

Page 51: Variability-Aware Parsing -- OOPSLA Talk

Variability-Aware Parsingin the Presence of

Lexical Macros and Conditional Compilation

Variability-Aware

Parser-Framework

+

* VA

2 43 5

Variability-Aware

Parser

https://github.com/ckaestne/TypeChef

Variability-Aware

Lexer

(2

*3

)+

4A5¬A

(macros, includes) (split & join)