slides

Transcription

slides
Noncanonical Parsing
Sylvain Schmitz
[email protected]
16 mai 2006
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
1 / 22
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
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
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) {
// ...
}
}
<FDecl >→ <FModS > <Type > <VDeclS > ;
<FModS >→<FModS ><FMod >| ε
<FMod >→public | final | static | transient | . . .
<Type >→ <NonVoidType >
<MHead >→<MModS ><ResType ><MDecl ><Throws >
<MModS >→<MModS ><MMod >| ε
<MMod >→public | final | static | abstract | . . .
<ResType >→ <NonVoidType >| void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
3 / 22
Bottom-Up Parsing
Nondeterminism
Example
MModS
public
final
static
int
FIELD = 10 ;
$ k public final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
Nondeterminism
Example
MModS
ε
|=
reduce
public
final
static
int
FIELD = 10 ;
$ε k public final static int FIELD = 10;$
$<MModS > k public final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
Nondeterminism
Example
MModS
ε
public
final
static
int
FIELD = 10 ;
$ <MModS > k public final static int FIELD = 10;$
|=
$ <MModS > public k final static int FIELD = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
Nondeterminism
Example
MModS
FMod
ε
public
|=
reduce
final
static
int
FIELD = 10 ;
$ <MModS > public k final static int FIELD = 10;$
$ <MModS > <FMod > k final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
Nondeterminism
Example
error!
MModS
FMod
ε
public
final
static
int
FIELD = 10 ;
$ <MModS ><FMod > k final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(0) Parsing
Example
MModS
MMod
ε
public
|=
reduce
final
static
int
FIELD = 10 ;
$ <MModS > public k final static int FIELD = 10;$
$ <MModS > <MMod > k final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(0) Parsing
Example
MModS
MModS
MMod
ε
public
|=
reduce
final
static
int
FIELD = 10 ;
$<MModS ><MMod > k final static int FIELD = 10;$
$<MModS > k final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(0) Parsing
Example
MModS
MModS
MMod
ε
public
final
static
int
FIELD = 10 ;
$ <MModS > k final static int FIELD = 10;$
|=
$ <MModS > final k static int FIELD = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(0) Parsing
Example
MModS
MModS
MMod
ε
public
|=
reduce
MMod
final
static
int
FIELD = 10 ;
$ <MModS > final k static int FIELD = 10;$
$ <MModS > <MMod > k static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(0) Parsing
Example
MModS
MModS
MModS
MMod
ε
public
|=
reduce
MMod
final
static
int
FIELD = 10 ;
$<MModS ><MMod > k static int FIELD = 10;$
$<MModS > k static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
4 / 22
Bottom-Up Parsing
LR(k) Parsing
Why Determinism Matters
+ Performance
+ Safety
− Generality
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
5 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
Knuth [1965]
I
complete stack information
I
k symbols of lookahead
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
6 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
Knuth [1965]
I
complete stack information: regular language
I
k symbols of lookahead
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
6 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
Knuth [1965]
I
complete stack information: regular language
I
k symbols of lookahead
Example
MMod
MModS
[$]
[$ MModS]
Sylvain Schmitz (Laboratoire I3S)
[$ MModS MMod]
static
[$ MModS
Noncanonical Parsing
static ]
EJC06 (LaBRI)
6 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MMod
ε
public
|=
reduce
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >][$ <MModS ><MMod >] k static int FIELD
[$][$ <MModS >] k static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MMod
ε
public
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >] k static int FIELD = 10;$
|=
[$][$ <MModS >] [$ <MModS > static] k int FIELD = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MMod
ε
public
|=
reduce
MMod
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >][$ <MModS > static] k int FIELD = 10;$
[$][$ <MModS >][$ <MModS ><MMod >] k int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
|=
reduce
MMod
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >][$ <MModS ><MMod >] k int FIELD = 10;$
[$][$ <MModS >] k int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
MMod
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >] k int FIELD = 10;$
|=
[$][$ <MModS >] [$ <MModS > int] k FIELD = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
|=
reduce
MMod NonVoidType
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >]int k FIELD = 10;$
[$][$ <MModS >][$ <MModS ><NonVoidType >] k FIELD = 10
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
|=
reduce
ResType
MMod NonVoidType
MMod
final
static
int
FIELD = 10 ;
[$][$ <MModS >][$ <MModS ><NonVoidType >] k FIELD = 10
[$][$ <MModS >][$ <MModS ><ResType >] k FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
ResType
MMod NonVoidType
MMod
final
static
int FIELD = 10
;
[$] . . . k FIELD = 10;$
|=
[$] . . . [$ <MModS ><ResType > FIELD] k = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
ResType
MMod NonVoidType
MMod
final
static
int FIELD = 10
;
[$] . . . [$ <MModS ><ResType > FIELD] k = 10;$
|=
[$] . . . [$ <MModS ><ResType > FIELD =] k 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
MModS
MModS
MModS
MModS
MMod
ε
public
ResType
MMod NonVoidType
MMod
error!
final
static
int FIELD = 10
;
[$] . . . [<MModS ><ResType > FIELD =] k 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
Nondeterminism
Example
FModS
ε
|=
reduce
public
final
static
int
FIELD = 10 ;
[$]ε k public final static int FIELD = 10;$
[$][$ <FModS >] k public final static int FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
7 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
I
I
complete stack information
k symbols of lookahead
Example
Choice between reductions <FModS > →ε and <MModS > →ε:
[$]εkpublic static final . . . final static int l =
[$]εkpublic static final . . . final static int l (
I
Unbounded lookahead needed for better generality
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
8 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
I
I
complete stack information
k symbols of lookahead
Example
Choice between reductions <FModS > →ε and <MModS > →ε:
[$]εkpublic static final . . . final static int l =
[$]εkpublic static final . . . final static int l (
I
Unbounded lookahead needed for better generality
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
8 / 22
Bottom-Up Parsing
LR(k) Parsing
LR(k) Parsing
I
I
complete stack information
k symbols of lookahead
Example
Choice between reductions <FModS > →ε and <MModS > →ε:
[$]εkpublic static final . . . final static int l =
[$]εkpublic static final . . . final static int l (
I
Unbounded lookahead needed for better generality
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
8 / 22
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
EJC06 (LaBRI)
9 / 22
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
EJC06 (LaBRI)
9 / 22
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
EJC06 (LaBRI)
10 / 22
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
EJC06 (LaBRI)
10 / 22
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
EJC06 (LaBRI)
10 / 22
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
EJC06 (LaBRI)
10 / 22
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
EJC06 (LaBRI)
10 / 22
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 <NonVoidType > FIELD = 10;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <NonVoidType > FIELD = 10;$
|=
$public final static <NonVoidType > k FIELD = 10;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <NonVoidType > k FIELD = 10 ;$
|=
$public final static <NonVoidType > FIELD = 10 k ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <NonVoidType > FIELD = 10 k ;$
$public final static <NonVoidType > k <VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <NonVoidType > k <VDeclS > ;$
$public final static k <Type > <VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <Type ><VDeclS > ;$
$public final k <FMod > <Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <FMod ><Type ><VDeclS > ;$
$public k <FMod > <FMod ><Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <FMod ><FMod ><Type ><VDeclS > ;$
$ k <FMod > <FMod ><FMod ><Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <FMod ><FMod ><FMod ><Type ><VDeclS > ;$
$ k <FModS > <FMod ><FMod ><FMod ><Type ><VDeclS >
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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 <FModS > <FMod ><FMod ><FMod ><Type ><VDeclS >
|=
$ <FModS > k <FMod ><FMod ><FMod ><Type ><VDeclS >
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
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
;
$ <FModS > k <FMod > <FMod ><FMod ><Type ><VDeclS
|=
$ <FModS > <FMod > k <FMod ><FMod ><Type ><VDeclS
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
VDeclS
FMod NonVoidType
FModS
FModS
FMod
ε
public
|=
reduce
FMod
final
static
int
FIELD = 10
;
$ <FModS ><FMod > k <FMod ><FMod ><Type ><VDeclS >
$ k <FModS > <FMod ><FMod ><Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
VDeclS
FMod NonVoidType
FModS
FModS
FMod
ε
public
FMod
final
static
int
;
FIELD = 10
$ k <FModS > <FMod ><FMod ><Type ><VDeclS > ;$
|=
$ <FModS > k <FMod ><FMod ><Type ><VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
VDeclS
FMod NonVoidType
FModS
FModS
FMod
ε
public
FMod
final
static
int
;
FIELD = 10
$ <FModS > k <FMod > <FMod ><Type ><VDeclS > ;$
|=
$ <FModS > <FMod > k <FMod ><Type ><VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
FModS
FModS
FModS
FMod
ε
public
|=
reduce
VDeclS
FMod NonVoidType
FMod
final
static
int
;
FIELD = 10
$ <FModS ><FMod > k <FMod ><Type ><VDeclS > ;$
$ k <FModS > <FMod ><Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
FModS
FModS
FModS
FMod
ε
public
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ k <FModS > <FMod ><Type ><VDeclS > ;$
|=
$ <FModS > k <FMod ><Type ><VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
Type
FModS
FModS
FModS
FMod
ε
public
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ <FModS > k <FMod > <Type ><VDeclS > ;$
|=
$ <FModS > <FMod > k <Type ><VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FModS
FModS
FModS
FModS
FMod
ε
public
|=
reduce
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ <FModS ><FMod > k <Type ><VDeclS > ;$
$ k <FModS > <Type ><VDeclS > ;$
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FModS
FModS
FModS
FModS
FMod
ε
public
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ k <FModS > <Type ><VDeclS > ;$
|=
$ <FModS > k <Type ><VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FModS
FModS
FModS
FModS
FMod
ε
public
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ <FModS > k <Type > <VDeclS > ;$
|=
$ <FModS > <Type > k <VDeclS > ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FModS
FModS
FModS
FModS
FMod
ε
public
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10
;
$ <FModS ><Type > k <VDeclS > ;$
|=
$ <FModS ><Type > <VDeclS > k ;$
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FModS
FModS
FModS
FModS
FMod
ε
public
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10 ;
$ <FModS ><Type ><VDeclS > k ; $
|=
$ <FModS ><Type ><VDeclS > ; k $
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FDecl
FModS
FModS
FModS
FModS
FMod
ε
public
|=
reduce
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10 ;
$ <FModS ><Type ><VDeclS > ; k $
$ k <FDecl > $
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Parsing Example
Noncanonical Parsing
Noncanonical Parsing
Colmerauer [1970], Szymanski and Williams [1976], Tai [1979]
Example
FDecl
FModS
FModS
FModS
FModS
FMod
ε
public
Type
VDeclS
FMod NonVoidType
FMod
final
static
int
FIELD = 10 ;
$ k <FDecl > $
|=
$ <FDecl > k $
shift
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
10 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FDecl
FModS
ε
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FModS
FDecl
FMod
ε
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FModS
FMod
ε
public
FDecl
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FModS
FMod
ε
public
final
FDecl
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FModS
FMod
ε
public
final
static
transient
Sylvain Schmitz (Laboratoire I3S)
FDecl
Noncanonical Parsing
;
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FModS
FMod
ε
public
final
static
transient
Sylvain Schmitz (Laboratoire I3S)
FDecl
Noncanonical Parsing
;
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FModS
FDecl
FModS
ε
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FDecl
FModS
Type
VDeclS
ε
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FDecl
FModS
Type
VDeclS
NonVoidType
ε
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Example
FDecl
FModS
Type
VDeclS
NonVoidType
ε
int
;
transient
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Notation
<FModS > → ε
Sylvain Schmitz (Laboratoire I3S)
{public, final, static, int,
transient, <FMod >, <Type >,
<NonVoidType >}
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Comparison
<FModS > → ε
{public, final, static, int,
transient, <FMod >, <Type >,
<NonVoidType >}
<MModS > → ε
{public, final, static, int,
abstract, <MMod >, <ReturnType >,
<NonVoidType >}
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Conflicts
<FModS > → ε
{public, final, static, int,
transient, <FMod >, <Type >,
<NonVoidType >}
<MModS > → ε
{public, final, static, int,
abstract, <MMod >, <ReturnType >,
<NonVoidType >}
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical Lookaheads
Decisions
<FModS > → ε
{public, final, static, int,
transient, <FMod >, <Type >,
<NonVoidType >}
<MModS > → ε
{public, final, static, int,
abstract, <MMod >, <ReturnType >,
<NonVoidType >}
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
11 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical LALR(1)
DeRemer and Pennello [1982], Schmitz [2006]
Example
[$ MModS MMod]
MMod
MModS [$ MModS]
[$]
ε
FModS
static
FMod
[$ FModS]
static
FMod
int
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
[$ MModS
static ]
[$ FModS FMod]
[$ MModS
static ]
[$ FModS Type]
[$ FModS
static ]
EJC06 (LaBRI)
12 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical LALR(1)
DeRemer and Pennello [1982], Schmitz [2006]
Example
[$ MModS MMod]
MMod
MModS [$ MModS]
[$]
ε
FModS
static
FMod
[$ FModS]
static
FMod
int
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
[$ MModS
static ]
[$ FModS FMod]
[$ MModS
static ]
[$ FModS Type]
[$ FModS
static ]
EJC06 (LaBRI)
12 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical LALR(1)
DeRemer and Pennello [1982], Schmitz [2006]
Example
[$ MModS MMod]
MMod
MModS [$ MModS]
[$]
ε
FModS
static
FMod
[$ FModS]
static
lookback
FMod
int
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
[$ MModS
static ]
[$ FModS FMod]
[$ MModS
static ]
[$ FModS Type]
[$ FModS
static ]
EJC06 (LaBRI)
12 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical LALR(1)
DeRemer and Pennello [1982], Schmitz [2006]
Example
[$ MModS MMod]
MMod
MModS [$ MModS]
[$]
ε
FModS
static
FMod
[$ FModS]
directly
reads
static
FMod
int
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
[$ MModS
static ]
[$ FModS FMod]
[$ MModS
static ]
[$ FModS Type]
[$ FModS
static ]
EJC06 (LaBRI)
12 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Valid Covers
Schmitz [2006]
Example
FModS
public
Sylvain Schmitz (Laboratoire I3S)
final
static
Noncanonical Parsing
int
FIELD = 10 ;
EJC06 (LaBRI)
13 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Valid Covers
Schmitz [2006]
Example
FModS
FModS
FModS
FMod
ε
public
Sylvain Schmitz (Laboratoire I3S)
FMod
final
static
Noncanonical Parsing
int
FIELD = 10
;
EJC06 (LaBRI)
13 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Valid Covers
Schmitz [2006]
Example
FModS
FModS
public
Sylvain Schmitz (Laboratoire I3S)
final
static
Noncanonical Parsing
int
FIELD = 10
;
EJC06 (LaBRI)
13 / 22
Noncanonical Parsing
Noncanonical Parsers Generation
Noncanonical States
Schmitz [2006]
Example
[$ MModS MMod]
MMod
MModS [$ MModS]
[$]
static
[$static ]
FModS
[$ FModS]
static
FMod
static
[$ MModS
static ]
[$ FModS FMod]
[$ MModS
static ]
J$ staticK = {[$ static], [$ <FModS > static],
[$ <MModS > static]}
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
14 / 22
End Comments
Closing Comments
Noncanonical Parsing
I
I
I
Good generality
Determinism
O(n) time complexity
NLALR(1)
I
I
Simple & fast computations on LR(0) automaton
Other prefix equivalences possible
Improvements
Better generality: no preset lookahead length
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
15 / 22
LR(0) Construction
Valid0($ <MModS > )
MModS
MModS
MMod
Throws
int
<MModS>→ <MModS >
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
· <MMod >
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MModS
MModS
MMod
Throws
public
int
·
<MMod>→ public
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MModS
MModS
MMod
Throws
static
int
·
<MMod>→ static
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MModS
MModS
MMod
Throws
final
int
·
<MMod>→ final
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MModS
MModS
MMod
Throws
abstract
int
·
<MMod>→ abstract
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MHead
MModS
ResType
MDecl
Throws
int
<MHead>→ <MModS >
Sylvain Schmitz (Laboratoire I3S)
· <ResType ><MDecl ><Thro
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MHead
MModS
ResType
MDecl
Throws
void
int
·
<ResType>→ <NonVoidType >
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MHead
MModS
ResType
MDecl
Throws
NonVoidType
int
·
<ResType>→ void
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MHead
MModS
ResType
MDecl
Throws
NonVoidType
int
·
<NonVoidType>→ int
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
·
<MModS>→ <MModS > <MMod >
<MMod >→ public
<MMod >→ static
<MMod >→ final
<MMod >→ abstract
<MHead >→ <MModS > <ResType ><MDecl ><
<ResType >→ <NonVoidType >
<ResType >→ void
<NonVoidType >→ int
·
·
·
·
·
·
·
Sylvain Schmitz (Laboratoire I3S)
·
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > static)
MModS
MModS
MMod
Throws
static
int
·
<MMod>→static
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > <MMod >)
MModS
MModS
MMod
Throws
int
<MModS>→ <MModS ><MMod >
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
·
EJC06 (LaBRI)
16 / 22
LR(0) Construction
Valid0($ <MModS > )
MMod
MModS
[$]
[$ MModS]
Sylvain Schmitz (Laboratoire I3S)
[$ MModS MMod]
static
[$ MModS
Noncanonical Parsing
static ]
EJC06 (LaBRI)
16 / 22
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
EJC06 (LaBRI)
18 / 22
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
EJC06 (LaBRI)
18 / 22
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
EJC06 (LaBRI)
18 / 22
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
EJC06 (LaBRI)
18 / 22
LR-Regular Parsing
Baker [1981], Bermudez and Schimpf [1990], Farré and Fortes Gálvez [2001]
I
Finite State lookahead discrimination
I
O(n2 ) time complexity
I
Only considers terminal symbols
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
19 / 22
LR-Regular Parsing
Baker [1981], Bermudez and Schimpf [1990], Farré and Fortes Gálvez [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
EJC06 (LaBRI)
19 / 22
LR-Regular Parsing
Baker [1981], Bermudez and Schimpf [1990], Farré and Fortes Gálvez [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
EJC06 (LaBRI)
19 / 22
LR-Regular Parsing
Baker [1981], Bermudez and Schimpf [1990], Farré and Fortes Gálvez [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
EJC06 (LaBRI)
19 / 22
T. P. Baker. Extending lookahead for LR parsers.
J. Comput. Syst. Sci., 22(2):243–259, 1981. doi:
10.1016/0022-0000(81)90030-1.
M. E. Bermudez and K. M. Schimpf. Practical arbitrary
lookahead LR parsing. J. Comput. Syst. Sci., 41(2):
230–250, 1990. doi: 10.1016/0022-0000(90)90037-L.
A. Colmerauer. Total precedence relations. J. ACM, 17
(1):14–30, Jan. 1970. doi: 10.1145/321556.321559.
F. DeRemer and T. Pennello. Efficient computation of
LALR(1) look-ahead sets. ACM Trans. Prog. Lang.
Syst., 4(4):615–649, 1982. doi:
10.1145/69622.357187.
J. Farré and J. Fortes Gálvez. A bounded-connect
construction for LR-regular parsers. In R. Wilhelm,
editor, CC’01, volumeNoncanonical
2027 Parsing
of Lecture Notes
in
Sylvain Schmitz (Laboratoire I3S)
EJC06 (LaBRI)
20 / 22
J. Gosling, B. Joy, and G. Steele. The JavaTM Language
Specification. Addison-Wesley Longman Publishing
Co., Inc., first edition, Aug. 1996. ISBN
0-201-63451-1. URL
http://java.sun.com/docs/books/jls/.
D. E. Knuth. On the translation of languages from left
to right. Information and Control, 8:607–639, 1965.
T. J. Parr and R. W. Quong. ANTLR: A
predicated-LL(k) parser generator. Software, Practice
and Experience, 25(7):789–810, 1995. ISSN
0038-0644. URL
http://citeseer.nj.nec.com/12770.
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
21 / 22
S. Schmitz. Noncanonical LALR(1) parsing. In Z. Dang
and O. H. Ibarra, editors, DLT’06, volume 4036 of
Lecture Notes in Computer Science, pages 95–107.
Springer, 2006.
T. G. Szymanski and J. H. Williams. Noncanonical
extensions of bottom-up parsing techniques. SIAM J.
Comput., 5(2):231–250, June 1976. URL
http://locus.siam.org/SICOMP/volume-05/
art 0205019.html.
K.-C. Tai. Noncanonical SLR(1) grammars. ACM Trans.
Prog. Lang. Syst., 1(2):295–320, 1979. ISSN
0164-0925. doi: 10.1145/357073.357083.
Sylvain Schmitz (Laboratoire I3S)
Noncanonical Parsing
EJC06 (LaBRI)
22 / 22

Similar documents