Noncanonical Parsing

The Java Programming Language. Java Declarations ...... K.-C. Tai. Noncanonical SLR(1) grammars. ACM Trans. Prog. Lang. Syst., 1(2):295–320, 1979. ISSN.
1001KB taille 2 téléchargements 228 vues
Noncanonical Parsing Sylvain Schmitz [email protected]

10 mai 2006

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

1 / 18

Context-Free Grammars

The Java Programming Language

Java Declarations Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } }

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Context-Free Grammars

The Java Programming Language

Java Grammar Gosling et al. [1996]

Example public class Declarations { public final static int FIELD = 10; public static int method (int i) { // ... } } → ; →| ε →public | final | static | transient | . . . → → →| ε →public | final | static | abstract | . . . → | void Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

3 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS ε

|= reduce

public

final

static

int

FIELD = 10 ;

$ε k public final static int FIELD = 10;$ $ k public final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS ε

public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$ |= $ public k final static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS

FMod

ε

public

|= reduce

final

static

int

FIELD = 10 ;

$ public k final static int FIELD = 10;$ $ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS FModS

FMod

ε

public

|= reduce

final

static

int

FIELD = 10 ;

$ k final static int FIELD = 10;$ $ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS FModS

FMod

ε

public

final

static

int

FIELD = 10 ;

$ k final static int FIELD = 10;$ |= $ final k static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FModS FModS

FMod

ε

public

|= reduce

FMod

final

static

int

FIELD = 10 ;

$ final k static int FIELD = 10;$ $ k static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS

FMod

ε

public

|= reduce

FMod

final

static

int

FIELD = 10 ;

$ k static int FIELD = 10;$ $ k static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS

FMod

ε

public

FMod

final

static

int

FIELD = 10 ;

$ k static int FIELD = 10;$ |= $ static k int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS

FMod

ε

public

|= reduce

FMod

FMod

final

static

int

FIELD = 10 ;

$ static k int FIELD = 10;$ $ k int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

|= reduce

FMod

FMod

final

static

int

FIELD = 10 ;

$ k int FIELD = 10;$ $ k int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

FMod

FMod

final

static

int

FIELD = 10 ;

$ k int FIELD = 10;$ |= $ int k FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

|= reduce

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ int k FIELD = 10;$ $ k FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

|= reduce

Type

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ k FIELD = 10;$ $ k FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

|= reduce

Type

VDeclS

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ FIELD = 10 k ;$ $ k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example FModS FModS FModS FModS

FMod

ε

public

Type

VDeclS

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ k ; $ |= $ ; k $ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FDecl FModS FModS

FModS FModS

FMod

ε

public

|= reduce

Type

VDeclS

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ ; k $ $ k $

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Parsing Java Declarations Example

FDecl FModS FModS

FModS FModS

FMod

ε

public

Type

VDeclS

FMod NonVoidType

FMod

final

static

int

FIELD = 10 ;

$ k $

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

4 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS ε

|= reduce

public

final

static

int

FIELD = 10 ;

$ε k public final static int FIELD = 10;$ $ k public final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS ε

public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$ |= $ public k final static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS

FMod

ε

public

|= reduce

final

static

int

FIELD = 10 ;

$ public k final static int FIELD = 10;$ $ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

error! MModS

FMod

ε

public

final

static

int

FIELD = 10 ;

$ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS

MMod

ε

public

|= reduce

final

static

int

FIELD = 10 ;

$ public k final static int FIELD = 10;$ $ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS MModS

MMod

ε

public

|= reduce

final

static

int

FIELD = 10 ;

$ k final static int FIELD = 10;$ $ k final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS MModS

MMod

ε

public

final

static

int

FIELD = 10 ;

$ k final static int FIELD = 10;$ |= $ final k static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

MModS MModS

MMod

ε

public

|= reduce

MMod

final

static

int

FIELD = 10 ;

$ final k static int FIELD = 10;$ $ k static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS

MMod

ε

public

|= reduce

MMod

final

static

int

FIELD = 10 ;

$ k static int FIELD = 10;$ $ k static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS

MMod

ε

public

MMod

final

static

int

FIELD = 10 ;

$ k static int FIELD = 10;$ |= $ static k int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS

MMod

ε

public

|= reduce

MMod

MMod

final

static

int

FIELD = 10 ;

$ static k int FIELD = 10;$ $ k int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

|= reduce

MMod

MMod

final

static

int

FIELD = 10 ;

$ k int FIELD = 10;$ $ k int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

MMod

MMod

final

static

int

FIELD = 10 ;

$ k int FIELD = 10;$ |= $ int k FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

|= reduce

MMod NonVoidType

MMod

final

static

int

FIELD = 10 ;

$ int k FIELD = 10;$ $ k FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

|= reduce

ResType

MMod NonVoidType

MMod

final

static

int

FIELD = 10 ;

$ k FIELD = 10;$ $ k FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

ResType

MMod NonVoidType

MMod

final

static

int FIELD = 10

;

$ k FIELD = 10;$ |= $ FIELD k = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

ResType

MMod NonVoidType

MMod

final

static

int FIELD = 10

;

$ FIELD k = 10;$ |= $ FIELD = k 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example MModS MModS MModS MModS

MMod

ε

public

ResType

MMod NonVoidType

MMod error! final

static

int FIELD = 10

;

$ FIELD = k 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Bottom-Up Parsing

Parsing Java

Nondeterminism Example

FModS ε

|= reduce

public

final

static

int

FIELD = 10 ;

$ε k public final static int FIELD = 10;$ $ k public final static int FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

5 / 18

Deterministic Parsing

Why Determinism Matters

Why Determinism Matters

+ Performance + Safety − Generality

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

6 / 18

Deterministic Parsing

Deterministic Techniques

LR(k) Parsing Knuth [1965]

I I

complete stack information k symbols of lookahead

Example Choice between reductions →ε and →ε: kpublic static final . . . final static int l = kpublic static final . . . final static int l (

I

Infinite lookahead needed for better generality

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

7 / 18

Deterministic Parsing

Deterministic Techniques

LR(k) Parsing Knuth [1965]

I I

complete stack information k symbols of lookahead

Example Choice between reductions →ε and →ε: kpublic static final . . . final static int l = kpublic static final . . . final static int l (

I

Infinite lookahead needed for better generality

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

7 / 18

Deterministic Parsing

Deterministic Techniques

LR(k) Parsing Knuth [1965]

I I

complete stack information k symbols of lookahead

Example Choice between reductions →ε and →ε: kpublic static final . . . final static int l = kpublic static final . . . final static int l (

I

Infinite lookahead needed for better generality

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

7 / 18

Deterministic Parsing

Deterministic Techniques

Syntactic Predicates Parr and Quong [1995]

I

User defined lookahead pattern

Example ((MMod)* ResType MDecl)?

I

Error-prone

I

Exponential time complexity

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

9 / 18

Deterministic Parsing

Deterministic Techniques

Syntactic Predicates Parr and Quong [1995]

I

User defined lookahead pattern

Example ((MMod)* ResType MDecl)?

I

Error-prone

I

Exponential time complexity

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

9 / 18

Deterministic Parsing

Deterministic Techniques

Syntactic Predicates Parr and Quong [1995]

I

User defined lookahead pattern

Example ((MMod)* ResType MDecl)?

I

Error-prone

I

Exponential time complexity

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

9 / 18

Deterministic Parsing

Deterministic Techniques

Syntactic Predicates Parr and Quong [1995]

I

User defined lookahead pattern

Example ((MMod)* ResType MDecl)?

I

Error-prone

I

Exponential time complexity

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

9 / 18

Deterministic Parsing

Deterministic Techniques

LR-Regular Parsing Baker [1981], Bermudez and Schimpf [1990], Farr´e and Fortes G´alvez [2001] I

Finite State lookahead discrimination

I

O(n2 ) time complexity

I

Only considers terminal symbols

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

10 / 18

Deterministic Parsing

Deterministic Techniques

LR-Regular Parsing Baker [1981], Bermudez and Schimpf [1990], Farr´e and Fortes G´alvez [2001] I

Finite State lookahead discrimination

Example

abstract void

int

(

MModS

= , ;

FModS

IDENT

public static ... transient

I

O(n2 ) time complexity

I

Only considers terminal symbols

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

10 / 18

Deterministic Parsing

Deterministic Techniques

LR-Regular Parsing Baker [1981], Bermudez and Schimpf [1990], Farr´e and Fortes G´alvez [2001] I

Finite State lookahead discrimination

Example

abstract void

int

(

MModS

= , ;

FModS

IDENT

public static ... transient

I

O(n2 ) time complexity

I

Only considers terminal symbols

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

10 / 18

Deterministic Parsing

Deterministic Techniques

LR-Regular Parsing Baker [1981], Bermudez and Schimpf [1990], Farr´e and Fortes G´alvez [2001] I

Finite State lookahead discrimination

Example

abstract void

int

(

MModS

= , ;

FModS

IDENT

public static ... transient

I

O(n2 ) time complexity

I

Only considers terminal symbols

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

10 / 18

Noncanonical Parsing

Why Noncanonical Parsing?

Parsing a Program Source

I

Good generality

I

Determinism

I

O(n) time complexity

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

11 / 18

Noncanonical Parsing

Why Noncanonical Parsing?

Parsing a Program Source

I

Good generality

I

Determinism

I

O(n) time complexity Noncanonical parsing

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

11 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example

FModS public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$ Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example

FModS public

final

static

int

FIELD = 10 ;

$ k public final static int FIELD = 10;$ |= $ public k final static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example

FModS public

final

static

int

FIELD = 10 ;

$public k final static int FIELD = 10;$ |= $public final k static int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example

FModS public

final

static

int

FIELD = 10 ;

$public final k static int FIELD = 10;$ |= $public final static k int FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example

FModS public

final

static

int

FIELD = 10 ;

$public final static k int FIELD = 10;$ |= $public final static int k FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example NonVoidType

FModS public

|= reduce

final

static

int

FIELD = 10 ;

$public final static int k FIELD = 10;$ $public final static k FIELD = 10;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example NonVoidType

FModS public

final

static

int

;

FIELD = 10

$public final static k FIELD = 10;$ |= $public final static k FIELD = 10;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example NonVoidType

FModS public

final

static

int

;

FIELD = 10

$public final static k FIELD = 10 ;$ |= $public final static FIELD = 10 k ;$ shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example VDeclS NonVoidType

FModS public

|= reduce

final

static

int

FIELD = 10

;

$public final static FIELD = 10 k ;$ $public final static k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Noncanonical Parsing

Parsing Example

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

NonVoidType

FModS public

|= reduce

final

static

int

;

FIELD = 10

$public final static k ;$ $public final static k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType

FModS public

|= reduce

final

static

int

FIELD = 10

;

$public final static k ;$ $public final k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType FMod FModS public

|= reduce

final

static

int

FIELD = 10

;

$public final k ;$ $public k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType FMod FModS

FMod public

|= reduce

final

static

int

;

FIELD = 10

$ public k ;$ $ k ;$

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType FMod FModS

FMod

ε

public

|= reduce

final

static

int

FIELD = 10

;

$ ε k ;$ $ k

Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType FMod FModS

FMod

ε

public

final

static

int

FIELD = 10

;

$ k |= $ k shift Sylvain Schmitz (Laboratoire I3S)

Noncanonical Parsing

S´ eminaires doctorants 3

12 / 18

Parsing Example

Noncanonical Parsing

Noncanonical Parsing Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]

Example Type

VDeclS

FMod NonVoidType FMod FModS

FMod

ε

public

final

static

int

FIELD = 10

;

$ k