Академический Документы
Профессиональный Документы
Культура Документы
DCFL A family of languages that are accepted by a Deterministic Pushdown Automaton (DPDA) Many programming languages can be described by means of DCFLs
Proper prefixes: I, a, ab
Prefix Property
Context-Free Language (CFL) L is said to have the prefix property whenever w is in L and no proper prefix of w is in L Not considered a serve restriction
Why?
Because we can easily convert a DCFL to a DCFL with the prefix property by introducing an endmarker
Any number of trailing symbols A suffix of a string, but not the string itself
Proper Suffix
Example Grammar
S Sc S SA | A A aSb | ab
LR-Grammar
LR-Items
A production with a dot anywhere in the right side (including the beginning and end) In the event of an I-production: B I
is an item
Example: Items
Sc, S
SA|A, A
aSb|ab
S Sc, S Sc, S Sc S SA, S SA, S SA, S A, S A A aSb, A aSb, A aSb, A aSb, A ab, A ab, A ab
Some Notation
* = 1 or more steps in a derivation *rm = rightmost derivation rm = single step in rightmost derivation
Right-Sentential Form
More terms
Handle
A substring which matches the right-hand side of a production and represents 1 step in the derivation Or more formally:
There are no useless symbols The rightmost derivation (in right-sentential form) and the handle are unique
Example
Sc, S
SA|A, A
aSb|ab
S Sc SAc SaSbc
More terms
Viable Prefix
(of a right-sentential form for K) Is any prefix of K ending no farther right than the right end of a handle of K. An item where the dot is the rightmost symbol
Complete item
Example
Sc, S
SA|A, A
aSb|ab
S *rm Ac abc
Valid prefixes:
A ab for prefix ab A ab for prefix a A ab for prefix I A ab is a complete item, @ Ac is the right-sentential form for abc
LR(0)
Left-to-right scan of the input producing a rightmost derivation with a look-ahead (on the input) of 0 symbols It is a restricted type of CFG 1st in the family of LR-grammars LR(0) grammars define exactly the DCFLs having the prefix property
The definition of LR(0) and the method of accepting L(G) for LR(0) grammar G by a DPDA depends on:
This regular set is accepted by an NFA whose states are the items for G
Continued
Given an NFA (whose states are the items for G) that accepts the regular set
We can apply the subset construction to this NFA and yield a DFA The DFA whose state is the set of valid items for K
NFA M
M = (Q, V T, H, q0, Q)
G = (V, T, P, S)
Three Rules
Allows expansion of a variable B appearing immediately to the right of the dot Permits moving the dot over any grammar symbol X if X is the next input symbol
Theorem 10.9
The NFA M has property that H(q0, K) contains A EF iff A EF is valid for K This theorem gives a method for computing the sets of valid items for any viable prefix
Note: It is an NFA. It can be converted to a DFA. Then by inspecting each state it can be determine if it is a valid LR(0) grammar
G is an LR(0) grammar if
The start symbol does not appear on the right side of any productions prefixes K of G where A E is a complete item, then it is unique
i.e., there are no other complete items (and there are no items with a terminal to the right of the dot) that are valid for K
Every LR(0) grammar generates a DCFL Every DCFL with the prefix property has a LR(0) grammar Every language with LR(0) grammar have the prefix property L is DCFL iff L has a LR(0) grammar
We trace out the rightmost derivation in reverse The stack holds a viable prefix (in rightsentential form) and the current state (of the DFA)
Reduction
If sk contains A E
Then A E is valid for X1X2Xk E = suffix of X1X2Xk E = Xi+1Xk w such that X1Xkw is a right-sentential form.
Let
Reduction Continued
There is a derivation:
Therefore, we pop Xi+1Xk from the stack and push A onto the stack
Shift
Instead we simply shift the next input symbol onto the stack
Theorem 10.10
Proof
We know that:
If G is LR(0) then
Reductions are the only way to get the right-sentential form when the state of the DFA (on the top of the stack) contains a complete item
When M starts on input w it will construct a right-most derivation for w in reverse order
When a shift is called for and the top DFA state on the stack has only incomplete items then there are no handles (Note: if there was a handle, then some DFA state on the stack would have a complete item)
Each state is put onto the top of the stack It would then immediately be reduced to A Therefore, a complete item cannot possibly become buried on the stack
Proof continued
The acceptance of G occurs when the top of the stack contains the start symbol The start symbol by definition of LR(0) grammars cannot appear on the right side of a production @L(G) always has a prefix property if G is LR(0)
Conclusion of Proof
Thus, if w is in L(G), M finds the rightmost derivation of w, reduces w to S, and accepts If M accepts w, then the sequence of right-sentential forms provides a derivation of w from S @N(M) = L(G)
LR(1) Grammars
LR grammar with 1 look-ahead All and only deterministic CFLs have LR(1) grammars Are greatly important to compiler design
Why?
Because they are broad enough to include the syntax of almost all programming languages Restrictive enough to have efficient parsers (that are essentially DPDAs)
LR(1) Item
Consists of an LR(0) item followed by a look-ahead set consisting of terminals and/or the special symbol $
General Form:
The set of LR(1) items forms the states of a viable prefix by converting the NFA to a DFA
A grammar is LR(1) if
The start symbol does not appear on the right side of any productions The set of items, I, valid for some viable prefix includes some complete item A E, {a1,,an} then
No ai appears immediately to the right of the dot in any item of I If B F, {b1,,bk} is another complete item in I, then ai { bj for any 1 e i e n and 1 e j e k
Similar to the DPDA used with LR(0) grammars However, it is allowed to use the next input symbol during its decision making This is accomplished by appending a $ to the end of the input and the DPDA keeps the next input symbol as part of the state
If the top set of items has a complete item A E, {a1, a2, , an}, where A { S, reduce by A E if the current input symbol is in {a1, a2, , an} If the top set of items has an item S E, {$}, then reduce by S E and accept if the current symbol is $ (i.e., the end of the input is reached) If the top set of items has an item A EaB, T, and a is the current input symbol, then shift
Guarantees that at most one of the rules will be applied for any input symbol or $ Often for practicality the information is summarized into a table