Introduction to Syntax: Difference between revisions

From Wiki**3

(Redirected page to ist:Introduction to Syntax)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{TOCright}}
#REDIRECT [[ist:Introduction to Syntax]]
 
= What is a Grammar? =
 
Uma gramática é um quádruplo <amsmath>G=(V,\Sigma,R,S)</amsmath>, onde <amsmath>V</amsmath> é um alfabeto; <amsmath>\Sigma</amsmath> é o conjunto de símbolos terminais (<amsmath>\Sigma\subseteq{}V</amsmath>); <amsmath>(V-\Sigma)</amsmath> é o conjunto de símbolos não terminais; <amsmath>S</amsmath> é o símbolo inicial; e <amsmath>R</amsmath> é o conjunto de regras (um subconjunto finito de <amsmath>(V^*(V-\Sigma)V^*)\times{}V^*</amsmath>).  As noções de derivação directa), de derivação, e de linguagem gerada são definidas como se segue:
 
* <amsmath>u\underset{\text{\tiny G}}{\Rightarrow}v\;\text{sse}\;\exists_{w_1,w_2\in{}V^*}: \exists_{(u',v')\in{}R}: u=w_1u'w_2 \wedge v=w_1v'w_2</amsmath>
* <amsmath>w_0\underset{\text{\tiny G}}{\Rightarrow}w_1\underset{\text{\tiny G}}{\Rightarrow}\cdots\underset{\text{\tiny G}}{\Rightarrow}w_n\;\Leftrightarrow{}w_0\overset{*}{\underset{\text{\tiny G}}{\Rightarrow}}w_n</amsmath>
* <amsmath>L(G) = \{ w\: |\: w \in \Sigma^*  \wedge{}S\overset{*}{\underset{\text{\tiny G}}{\Rightarrow}}w \}</amsmath>
 
= The FIRST and FOLLOW sets =
 
== Computing the FIRST Set ==
 
The FIRST set for a given string or symbol can be computed as follows:
 
# If '''a''' is a terminal symbol, then FIRST('''a''') = {'''a'''}
# If X is a non-terminal symbol and X -> ε is a production then add ε to FIRST(X)
# If X is a non-terminal symbol and X -> Y<sub>1</sub>...Y<sub>n</sub> is a production, then
#:a ∈ FIRST(X) if a ∈ FIRST(Y<sub>i</sub>) and ε ∈ FIRST(Y<sub>j</sub>), i>j (i.e., Y<sub>j</sub> <amsmath>\overset{*}{\Rightarrow}</amsmath> ε)
 
As an example, consider production X -> Y<sub>1</sub>...Y<sub>n</sub>
* If Y<sub>1</sub> <amsmath>\overset{*}{\nRightarrow}</amsmath> ε then FIRST(X) = FIRST(Y<sub>1</sub>)
* If Y<sub>1</sub> <amsmath>\overset{*}{\Rightarrow}</amsmath> ε and Y<sub>2</sub> <amsmath>\overset{*}{\nRightarrow}</amsmath> ε then FIRST(X) = FIRST(Y<sub>1</sub>) \ {ε} ∪ FIRST(Y<sub>2</sub>)
* If Y<sub>i</sub> <amsmath>\overset{*}{\Rightarrow}</amsmath> ε (∀i) then FIRST(X) = ∪<sub>i</sub>(FIRST(Y<sub>i</sub>)\{ε}) ∪ {ε}
 
The FIRST set can also be computed for a string Y<sub>1</sub>...Y<sub>n</sub> much in the same way as in case 3 above.
 
== Computing the FOLLOW Set ==
 
The FOLLOW set is computed for non-terminals and indicates the set of terminal symbols that are possible after a given non-terminal. The special symbol $ is used to represent the end of phrase (end of input).
 
# If X is the grammar's initial symbol then {$} ⊆ FOLLOW(X)
# If A -> αXβ is a production, then FIRST(β)\{ε} ⊆ FOLLOW(X)
# If A -> αX or A -> αXβ (β <amsmath>\overset{*}{\Rightarrow}</amsmath> ε), then FOLLOW(A) ⊆ FOLLOW(X)
 
The algorithm should be repeated until the FOLLOW set remains unchanged.
 
= Exercises =
 
* [[Introduction to Syntax/Exercise 1|Exercise 1]] - simple ambiguous grammar.
 
[[category:Teaching]]
[[category:Compilers]]

Latest revision as of 22:16, 5 December 2018