Вы находитесь на странице: 1из 44

How to convert a left linear

grammar to a right linear grammar

Roger L. Costello
May 28, 2014
Objective
This mini-tutorial will answer these
questions:
1. What is a linear grammar? What is a
left linear grammar? What is a right
linear grammar?

2
Objective
This mini-tutorial will answer these
questions:
1. What is a linear grammar? What is a
left linear grammar? What is a right
linear grammar?
2. Left linear grammars are evil why?

3
Objective
This mini-tutorial will answer these
questions:
1. What is a linear grammar? What is a
left linear grammar? What is a right
linear grammar?
2. Left linear grammars are evil why?
3. What algorithm can be used to convert
a left linear grammar to a right linear
grammar?

4
Linear grammar

A linear grammar is a context-free


grammar that has at most one non-
terminal symbol on the right hand side
of each grammar rule.
A rule may have just terminal symbols on
the right hand side (zero non-terminals).
Here is a linear grammar:
S aA
A aBb
B Bb
5
Left linear grammar
A left linear grammar is a linear
grammar in which the non-terminal
symbol always occurs on the left
side.
Here is a left linear grammar:
S Aa
A ab

6
Right linear grammar
A right linear grammar is a linear
grammar in which the non-terminal
symbol always occurs on the right
side.
Here is a right linear grammar:
S abaA
A

7
Left linear grammars are
evil
Consider this rule from a left linear grammar:
A Babc
Can that rule be used to recognize this string:
abbabc
We need to check the rule for B:
B Cb | D
Now we need to check the rules for C and D.
This is very complicated.
Left linear grammars require complex parsers.

8
Right linear grammars are
good
Consider this rule from a right linear grammar:
A abcB
Can that rule be used to recognize this string:
abcabb
We immediately see that the first part of the
string abc matches the first part of the rule.
Thus, the problem simplifies to this: can the rule
for B be used to recognize this string :
abb
Parsers for right linear grammars are much
simpler.

9
Convert left linear to right
linear
Now we will see an algorithm for
converting any left linear grammar to
its equivalent right linear grammar.
left linear right linear

S Aa S abaA
A ab A
Both grammars generate this
language: {aba}

10
May need to make a new start
symbol
The algorithm on the following slides
assume that the left linear grammar
doesnt have any rules with the start
symbol on the right hand side.
If the left linear grammar has a rule with
the start symbol S on the right hand
side, simply add this rule:
S0 S

11
Symbols used by the
algorithm
Let S denote the start symbol
Let A, B denote non-terminal symbols
Let p denote zero or more terminal symbols
Let denote the empty symbol

12
Algorithm
1) If the left linear grammar has a rule S p, then
make that a rule in the right linear grammar
2) If the left linear grammar has a rule A p, then
add the following rule to the right linear grammar:
S pA
3) If the left linear grammar has a rule B Ap, add
the following rule to the right linear grammar:
A pB
4) If the left linear grammar has a rule S Ap, then
add the following rule to the right linear grammar:
A p

13
Convert this left linear
grammar
left linear

S Aa
A ab

14
Right hand side has
terminals

left linear right linear

S Aa S abA
A ab

2) If the left linear grammar has this rule


A p, then add the following rule to the
right linear grammar: S pA

15
Right hand side of S has non-
terminal

left linear right linear

S Aa S abA
A ab Aa

4) If the left linear grammar has S


Ap, then add the following rule to the
right linear grammar: A p

16
Equivalent!

left linear right linear

S Aa S abA
A ab Aa

Both grammars generate this


language: {aba}

17
Convert this left linear
grammar
original grammar left linear

S Ab S0 S
S Sb S Ab
A Aa make a
new start S Sb
Aa symbol A Aa
Aa

Convert this

18
Right hand side has
terminals
left linear right linear

S0 S S0 aA
S Ab
S Sb
A Aa
Aa

2) If the left linear grammar has this


rule A p, then add the following rule
to the right linear grammar: S pA
19
Right hand side has non-
terminal
left linear right linear

S0 S S0 aA
S Ab A bS
S Sb A aA
A Aa S bS
Aa
3) If the left linear grammar has a rule B Ap,
add the following rule to the right linear
grammar: A pB
20
Right hand side of start symbol has
non-terminal

left linear right linear

S0 S S0 aA
S Ab A bS
S Sb A aA
A Aa S bS
Aa S

4) If the left linear grammar has S


Ap, then add the following rule to the
right linear grammar: A p
21
Equivalent!

left linear right linear

S0 S S0 aA
S Ab A bS
S Sb A aA
A Aa S bS
Aa S

Both grammars generate this


language: {a+b+}

22
Will the algorithm always
work?
We have seen two examples where
the algorithm creates a right linear
grammar that is equivalent to the left
linear grammar.
But will the algorithm always produce
an equivalent grammar?
Yes! The following slide shows why.

23
Generate string p
Let p = a string generated by the left
linear grammar.
We will show that the grammar
generated by the algorithm also
produces p.

24
Case 1: the start symbol produces p

Suppose the left linear grammar has this


rule:
S p. Then the right linear grammar will
have the same rule (see 1 below). So the
right linear grammar will also produce p.

Algorithm:
1) If the left linear grammar contains S p, then put that rule in the right linear
grammar.
2) If the left linear grammar contains A p, then put this rule in the right linear
grammar: S pA
3) If the left linear grammar contains B Ap, then put this rule in the right linear
grammar: A pB
4) If the left linear grammar contains S Ap, then put this rule in the right linear
grammar: A p
25
Case 2: multiple rules needed
to produce p
Suppose p is produced by a
sequence of n production rules:
S A1p1
A2p2p1
A3p3p2p1

An-1pn-1p3p2p1
pnpn-1p3p2p1 p (p is composed of n symbols)

26
Case 2 (continued)

S A1p1
A2p2p1
A3p3p2p1 Lets see what right linear rules will be
generated by the algorithm for the rules
An-1pn-1p3p2p1 implied by this production sequence.
pnpn-1p3p2p1

27
Algorithm inputs and
outputs
left linear rules

algorithm

right linear rules

28
Case 2 (continued)

S A1p1 S A1p1
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
A1 p1 (see 4 below)

Algorithm:
1) If the left linear grammar contains S p, then put that rule in the right linear
grammar.
2) If the left linear grammar contains A p, then put this rule in the right linear
grammar: S pA
3) If the left linear grammar contains B Ap, then put this rule in the right linear
grammar: A pB
4) If the left linear grammar contains S Ap, then put this rule in the right linear
29
grammar: A p
Case 2 (continued)

S A1p1 A1 A2p2
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
A2 p2A1 (see 3 below)

Algorithm:
1) If the left linear grammar contains S p, then put that rule in the right linear
grammar.
2) If the left linear grammar contains A p, then put this rule in the right linear
grammar: S pA
3) If the left linear grammar contains B Ap, then put this rule in the right linear
grammar: A pB
4) If the left linear grammar contains S Ap, then put this rule in the right linear
30
grammar: A p
Case 2 (continued)
S A1p1
S A1p1 A1 A2p2
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
A1 p1
A2 p2A1

31
Case 2 (continued)
S A1p1
A1 A2p2

algorithm

A 1 p1 From A2 we obtain p2p1:


A2 p2A1 A2 p2A1
p2p1

32
Case 2 (continued)

S A1p1 A2 A3p3
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
A3 p3A2 (see 3 below)

Algorithm:
1) If the left linear grammar contains S p, then put that rule in the right linear
grammar.
2) If the left linear grammar contains A p, then put this rule in the right linear
grammar: S pA
3) If the left linear grammar contains B Ap, then put this rule in the right linear
grammar: A pB
4) If the left linear grammar contains S Ap, then put this rule in the right linear
33
grammar: A p
Case 2 (continued)
S A1p1
A1 A2p2
S A1p1 A2 A3p3
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
A1 p1
A2 p2A1
A3 p3A2

34
Case 2 (continued)
S A1p1
A1 A2p2
A2 A3p3

algorithm

A 1 p1 From A3 we obtain p3p2p1:


A2 p2A1 A p A
3 3 2
A3 p3A2 p3p2A1
p3p2p1

35
Case 2 (continued)

S A1p1 An-1 pn
A2p2p1
A3p3p2p1
algorithm
An-1pn-1p3p2p1
pnpn-1p3p2p1
S pnAn-1 (see 2 below)

Algorithm:
1) If the left linear grammar contains S p, then put that rule in the right linear
grammar.
2) If the left linear grammar contains A p, then put this rule in the right linear
grammar: S pA
3) If the left linear grammar contains B Ap, then put this rule in the right linear
grammar: A pB
4) If the left linear grammar contains S Ap, then put this rule in the right linear
36
grammar: A p
Case 2 (concluded)
S A1p1
A1 A2p2
A2 A3p3

An-1 pn

algorithm

A 1 p1 From S we obtain pnp2p1:


A2 p2A1 S pnAn-1
A3 p3A2 pnpn-1An-2

An-1 pn-1An-2 pnpn-1p3A2
S pnAn-1 pnpn-1p3p2A1
(this is the desired string, p)
pnp3pn-1p2p1 37
We have shown that for any string p
generated by the left linear grammar,
the right linear grammar produced by
the algorithm will also generate p.

38
How we understand the algorithm
S A1p1 These rules descend through the non-
A1 A2p2 terminals until reaching a rule with terminals
A2 A3p3 on the RHS, the terminals are output, then we

unwind from the descent and output the
An-1 pn terminals.

algorithm

A 1 p1
A2 p2A1
Make the rule with terminals on the RHS the
A3 p3A2
starting rule and output its terminals. Ascend
through the other rules.
An-1 pn-1An-2
S pnAn-1

39
How we understand the algorithm
S A1p1
A1 A2p2
A2 A3p3

An-1 pn

algorithm If the left linear grammar contains A


p, then put this rule in the right
linear grammar: S pA
A 1 p1
A2 p2A1
A3 p3A2

An-1 pn-1An-2
S pnAn-1

40
How we understand the algorithm
S A1p1
A1 A2p2
A2 A3p3

An-1 pn

algorithm If the left linear grammar contains B


Ap, then put this rule in the right
linear grammar: A pB
A 1 p1
A2 p2A1
A3 p3A2

An-1 pn-1An-2
S pnAn-1

41
How we understand the algorithm
S A1p1
A1 A2p2
A2 A3p3

If the left linear grammar contains S
An-1 pn
Ap, then put this rule in the right
linear grammar: A p
algorithm

A 1 p1
A2 p2A1
A3 p3A2

An-1 pn-1An-2
S pnAn-1

42
Left-linear grammars generate
Type 3 languages
Every left-linear grammar can be
converted to an equivalent right-
linear grammar.
Equivalent right-linear grammar
means the grammar generate the same
language.
Right-linear grammars generate Type
3 languages.
Therefore, every left-linear grammar
generates a Type 3 language. 43
Acknowledgement
The algorithm shown in these slides
comes from the wonderful book:
Introduction to Formal Languages by
Gyorgy Revesz

44