Compiler Design 2nd Homework Solution

       

1. 아래의 코드를 위 문법의 생성 규칙을 통해 유도해보세요.
if ( a + 5 ){
	b = 0;
} else {
	b = 1;
}
b = 2000 + 21;

$ \langle \textrm{SubJava} \rangle \Rightarrow \langle \textrm{stmts} \rangle $

$ \qquad \qquad \quad \Rightarrow \langle \textrm{stmts} \rangle\, \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{exp} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else} \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{exp} \rangle + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else} \,\langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{term} \rangle + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else} \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{factor} \rangle + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else} \,\langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{variable} \rangle + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{ident} \rangle + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if} \, ( ( \langle \textrm{letter} \rangle \, \mid \, \_ \; ) \{\langle \textrm{letter} \rangle \, \mid \,\langle \textrm{digit} \rangle\;\mid \; \_ \; \} + \langle \textrm{term} \rangle) \,\langle \textrm{stmt} \rangle \, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(\langle \textrm{letter} \rangle \{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\, \_ \; \} + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a\,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\, \_ \; \}+ \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + \langle \textrm{term} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + \langle \textrm{factor} \rangle)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + \langle \textrm{number} \rangle)\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + \{\langle \textrm{digit} \rangle\})\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle \,\langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\langle \textrm{stmt} \rangle\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{\langle \textrm{stmts} \rangle\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{\langle \textrm{stmt} \rangle\} \,\textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{\langle \textrm{ident} \rangle=\langle \textrm{exp} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{(\langle \textrm{letter} \rangle\,\, )\{\langle \textrm{letter} \rangle\,\,\langle \textrm{digit} \rangle\,\, \}=\langle \textrm{exp} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{\langle \textrm{letter} \rangle\,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \; \}=\langle \textrm{exp} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b\,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \; \}=\langle \textrm{exp} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\,\langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=\langle \textrm{exp} \rangle;\}\, \textrm{else} \,\langle \textrm{stmt} \rangle \,\langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=\langle \textrm{term} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=\langle \textrm{factor} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=\langle \textrm{number} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=\langle \textrm{digit} \rangle;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \langle \textrm{stmt} \rangle\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{\langle \textrm{stmts} \rangle\}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{\langle \textrm{stmt} \rangle\}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else}\, \{ \langle \textrm{ident} \rangle=\langle \textrm{exp} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{ (\langle \textrm{letter} \rangle \,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\}=\langle \textrm{exp} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{ \langle \textrm{letter} \rangle \{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\}=\langle \textrm{exp} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\{b=0;\}\, \textrm{else}\, \{ b\,\{\langle \textrm{letter} \rangle \,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\}=\langle \textrm{exp} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\{b=0;\}\, \textrm{else} \,\{b=\langle \textrm{exp} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=\langle \textrm{term} \rangle; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else}\, \{b=\langle \textrm{factor} \rangle ; \} \,\langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else}\, \{b=\langle \textrm{number} \rangle ; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=\{\langle \textrm{digit} \rangle\} ; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, \langle \textrm{stmt} \rangle$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, \langle \textrm{ident} \rangle = \langle \textrm{exp} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\{b=0;\}\, \textrm{else}\, \{ b=1; \} (\langle \textrm{letter} \rangle \,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} = \langle \textrm{exp} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\{b=0;\}\, \textrm{else}\, \{b=1; \}\, \langle \textrm{letter} \rangle\, \{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} = \langle \textrm{exp} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b\,\{\langle \textrm{letter}\rangle \,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} = \langle \textrm{exp} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b = \langle \textrm{exp} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b = \langle \textrm{exp} \rangle + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b = \langle \textrm{term} \rangle + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b = \langle \textrm{factor} \rangle + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \}\, b = \langle \textrm{number} \rangle + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \} \,b = \{\langle \textrm{digit} \rangle\} + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else} \,\{b=1; \}\, b = 2000 + \langle \textrm{term} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \} \,b = 2000 + \langle \textrm{factor} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\}\, \textrm{else}\, \{b=1; \} \,b = 2000 + \langle \textrm{number} \rangle;$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else}\, \{b=1; \}\, b = 2000 + \{\langle \textrm{digit} \rangle\};$

$ \qquad \qquad \quad \Rightarrow \textrm{if}\,(a + 5)\,\{b=0;\} \,\textrm{else} \,\{b=1; \}\, b = 2000 + 21;$

   

2. 아래의 코드를 위 문법의 생성 규칙을 통해 유도해보세요.
do {
   a = a + b * c / d;
} while ( 10 ) ;

$ \langle SubJava \rangle \Rightarrow \langle \textrm{stmts} \rangle $

$ \qquad \qquad \quad \Rightarrow \langle \textrm{stmt} \rangle $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \langle \textrm{stmt} \rangle \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{\langle \textrm{stmt} \rangle \} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{ \langle \textrm{stmt} \rangle \} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{\langle \textrm{ident} \rangle = \langle \textrm{exp} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{(\langle \textrm{letter} \rangle \, \mid \, \_ \; ) \{ \langle \textrm{letter} \rangle \, \mid \, \langle \textrm{digit} \rangle \, \mid \, \_ \; \} = \langle \textrm{exp} \rangle ; \} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{\langle \textrm{letter} \rangle \{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} = \langle \textrm{exp} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a\, \{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} = \langle \textrm{exp} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{exp} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{exp} \rangle + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{term} \rangle + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{factor} \rangle + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{variable} \rangle + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{ident} \rangle + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = (\langle \textrm{letter} \rangle\,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = \langle \textrm{letter} \rangle\,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a\,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{term} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{term} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{term} \rangle * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{factor} \rangle * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{variable} \rangle * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{ident} \rangle * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + (\langle \textrm{letter} \rangle\,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + \langle \textrm{letter} \rangle \,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b \,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * \langle \textrm{factor} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * \langle \textrm{variable} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * \langle \textrm{ident} \rangle / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * (\langle \textrm{letter} \rangle\,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * \langle \textrm{letter} \rangle\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / \langle \textrm{factor} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / \langle \textrm{variable} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / \langle \textrm{ident} \rangle ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / (\langle \textrm{letter} \rangle\,\mid\,\_ \;)\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / \langle \textrm{letter} \rangle\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c / d \,\{\langle \textrm{letter} \rangle\,\mid\,\langle \textrm{digit} \rangle\,\mid\,\_ \;\} ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (\langle \textrm{exp} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (\langle \textrm{term} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (\langle \textrm{factor} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (\langle \textrm{number} \rangle); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (\{\langle \textrm{digit} \rangle\}); $

$ \qquad \qquad \quad \Rightarrow \textrm{do} \, \{a = a + b * c \,/\, d ;\} \, \textrm{while} \, (10); $

   

3. 아래의 코드는 위 문법을 통해 유도할 수 없습니다. 문법에 어떤 생성 규칙을 추가하면 아래 코드를 유도하게 할 수 있을지 생성 규칙을 만들어보세요.
for ( i = 0; i < 10; i++) {
   num21 = 20.0;
}

$\langle \textrm{stmt} \rangle ::= \textrm{for} \, (\langle \textrm{assign-st} \rangle \langle \textrm{comp-exp} \rangle ; \langle \textrm{inc-dec} \rangle) \, \langle \textrm{stmt} \rangle$

$\langle \textrm{comp-exp} \rangle ::= \langle \textrm{exp} \rangle < \langle \textrm{exp} \rangle$

$\langle \textrm{inc-dec} \rangle ::= \, \langle \textrm{variable} \rangle ++$

$\langle \textrm{number} \rangle ::= \{\langle \textrm{digit} \rangle\}.\{\langle \textrm{digit} \rangle\}$