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