<?xml version="1.0" encoding="iso-2022-jp"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
  "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"
  [<!ENTITY mathml "http://www.w3.org/1998/Math/MathML">]
>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-2022-jp" />
<link rev="made" href="mailto:sakamoto@c.dendai.ac.jp" />
<link rel="stylesheet" type="text/css" href="/default.css" />
<title>Parse and Syntax Tree(2)</title>
</head>
<body>
<h1>$BBh(B 12 $B2s(B $B9=J82r@OLZ(B(2)</h1>
<h2>$BK\F|$NFbMF(B</h2>
<ul>
<li><a href="#1">12-1. $B9=J82r@O(B</a></li>
<li><a href="#2">12-2. $BLZ$NC5:w$HI=<((B</a></li>
</ul>
<hr />
<p>
$B$3$N%I%-%e%a%s%H$O(B
<a href="http://edu.net.c.dendai.ac.jp/">http://edu.net.c.dendai.ac.jp/</a>
$B>e$G8x3+$5$l$F$$$^$9!#(B
</p>
<h2><a id="1">12-1. $B9=J82r@O(B</a></h2>
<p>
$B:#2s$O%3%s%Q%$%i%3%s%Q%$%i$J$7$G!"J8K!$+$i$=$l$r2r<a$9$k%W%m%0%i%`$r:n(B
$B$k<jK!$r3X$S$^$9!#(B
$B$J$*!"9=J82r@O$N$3$H$r(B<dfn>parse</dfn>$B!"9=J82r@O$r$9$k%W%m%0%i%`$J$I$r(B
<dfn>parser</dfn>$B$H$$$$$^$9!#(B
</p>
<h3>$BAGKQ$J2r@OK!(B</h3>
<p>
$B%P%C%+%9!&%J%&%"5-K!$NAGKQ$J2r@OK!$H$7$F<!$N$h$&$J$b$N$,$"$j$^$9!#(B
$BNc$($P!"(B A$B"*(BbCD $B$G(B A,C,D $B$,Hs=*C<5-9f!"(B b $B$,=*C<5-9f$@$C$?;~!"4X?t(B A
$B$r<!$N$h$&$K:n$j$^$9!#(B
</p>
<pre><code>
void A(){
   $B5-9f(B b $B$rFI$`(B;
   C();
   D();
}
</code></pre>
<p>
$B$=$7$FHs=*C<5-9f(B C, D $B$KBP$7$F$bF1MM$K4X?t$r:n$j$^$9!#(B
$B$3$N$h$&$K$9$k$H9=J8LZDL$j$K4X?t$,8F$S=P$5$l$F!"M?$($i$l$?5-9fNs$r=hM}(B
$B$G$-$k(B<em>$B>l9g$,$"$j$^$9(B</em>$B!#(B
$B$7$+$7!"<B:]$O0l$D$NHs=*C<5-9f$+$iJ#?t$NF3=P5,B'$,B8:_$7$^$9!#(B
$BNc$($P!"2<$NNc$G$O>uBV(B S $B$GJ8;z(B a $B$rFI$_9~$s$@;~!"(B A $B$+(B B $B$N$I$A$i$rF3(B
$B=P$9$k$+$O$9$0$K$O7h$a$i$l$^$;$s!#(B
</p>
<div>
S$B"*(BA|B
<br/>
A$B"*(Bab
<br/>
B$B"*(Bac
</div>
<p>
$BAGKQ$JJ}K!$H$7$F$O!"E,Ev$KF3=P5,B'$rA*$S!"ESCf$G<:GT$7$?$iJL$NF3=P5,B'(B
$B$rA*$VJ}K!$,9M$($i$l$^$9!#$3$l$r(B<dfn>$B%P%C%/%H%i%C%/(B</dfn>$B$H8@$$$^$9!#(B
$B3N$+$K$3$NJ}K!$G$b9=J82r@O$G$-$^$9$,!"$7$+$7!"%-%e!<$r<BAu$7$F$$$k$h$&(B
$B$K!"ESCf$NF~NO$rA4$F3P$($kI,MW$,$"$j$^$9!#(B
$B$^$?!"9M$(F@$kA4$F$N9=J8LZ$r0l$D0l$D@8@.$7$F$OHf3S$9$k$h$&$J$b$N$J$N$G!"(B
$B8zN($,0-$$$G$9!#(B
</p>
<h4>$B%P%C%/%H%i%C%/$NNc(B</h4>
<pre><code>
#include &lt;stdio.h&gt;
#define SIZE 100
int queue[SIZE];
int r=0,g=0;
int getletter(){
  if(r==g){
    queue[(g=(g+1)% SIZE)]=getchar();
  }
  r=(r+1)% SIZE;
  return queue[r];
}
ungetletter(int c){
  queue[r]=c;
  r=(r+SIZE -1)%SIZE;
}
int S(){
  if(A() || B()){ /* A $B$,$@$a$J$i(B B */
   return 1;
  }else{
    return 0;
  }
}
int A(){
  int c1,c2;
  c1=getletter();
  if(c1!='a'){
    ungetletter(c1);
    return 0;
  }
  c2=getletter();
  if(c2!='b'){
    ungetletter(c2);
    ungetletter(c1);
    return 0; /* A $B$,E,9g$7$J$$$J$iFI$s$@J8;z$r$9$Y$FJV$9(B */
  }
  return 1;
}
int B(){
  int c1,c2;
  c1=getletter();
  if(c1!='a'){
    ungetletter(c1);
    return 0;
  }
  c2=getletter();
  if(c2!='c'){
    ungetletter(c2);
    ungetletter(c1);
    return 0;
  }
  return 1;
}
main(){
  if(S()){
    printf("Ok\n");
  }else{
    printf("NG\n");
  }
}
</code></pre>
<hr />

<p>
$B%P%C%/%H%i%C%/$rHr$1!"8zN(NI$/9=J82r@O$9$k$?$a$K$O$I$N$h$&$J$3$H$,9M$((B
$B$i$l$k$G$7$g$&$+(B?
$B0l$D$N9M$(J}$H$7$F!"<!$KFI$_9~$`5-9f$+$iI,$:F3=P5,B'$,0l$D7hDj$G$-$k$h(B
$B$&$JJ8K!$G$"$l$P!"J8;z$rFI$_9~$_$J$,$i(B if $BJ8$G$I$A$i$NF3=P5,B'$rA*Br$G(B
$B$-$k$?$a!"%P%C%/%H%i%C%/$r9T$o$:$K:Q$_$^$9!#(B
$B$=$N$h$&$J!"$I$s$JHs=*C<5-9f$KBP$7$F$b!"<!$N@hF,$NJ8;z$rFI$`$@$1$G0l0U(B
$B$KF3=P$,2DG=$JJ8K!$r(B <dfn>LL(1)$BJ8K!(B</dfn> $B$H8@$$$^$9!#(B
</p>
<h3>$B:8:F5"@-$N=|5n(B</h3>
<p>
$B$5$F$3$3$G$OA02s<h$j>e$2$?B-$7;;$NJ8K!$r<h$j>e$2!"%3%s%Q%$%i%3%s%Q%$%i(B
$BL5$7$G!"J8K!$r%W%m%0%i%`$GI=8=$9$k<jK!$r9M$($^$9!#(B
$B$^$:!"A02s$NB-$7;;$NJ8K!$O0J2<$NDL$j$G$9!#(B
</p>
<h4>$BJ8K!(B G<sub>1</sub></h4>
<p>
=({$BOB(B},{$B?t(B, +}, P<sub>1</sub>, $BOB(B)
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$BOB(B</mi><mi>+</mi><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<hr />
<p>
$B$3$NJ8K!$O$=$N$^$^$G$O>e$G=R$Y$?$h$&$K!"J8;z$rFI$s$G$b<!$NF3=P5,B'$r7h(B
$B$a$k$3$H$O$G$-$^$;$s!#(B
$BF~NONs$KBP$7$F(B
 <math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>&RightArrow;</mo><mi>$BOB(B</mi><mi>+</mi><mi>$B?t(B</mi>
</math>
$B$H$$$&%k!<%k$rE,1~$9$k$K$O!"$=$N@hF,ItJ,$,!VOB!W$N7A$K$J$C$F$$(B
$B$k$+$I$&$+$rD4$Y$kI,MW$,$"$j$^$9!#$=$7$F!"$=$N$?$a$K$O$=$N@hF,ItJ,$,(B
$B!VOB!W$N7A$K$J$C$F$$$k$+$I$&$+$rD4$Y$kI,MW$,$"$j$^$9!#(B
$B$3$N$h$&$K(B<em>$B:8JU$HF1$8Hs=*C<5-9f$,1&JU$N@hF,$KMh$F$$$k$H(B</em>$B!"F~NO(B
$BNs$r=g$KFI$`9=J82r@O$,$G$-$J$/$J$j$^$9!#(B
$B$3$l$r(B<dfn>$B:8:F5"@-(B</dfn>$B$H8@$$$^$9!#(B
$B$3$N:8:F5"@-$O<!$N$h$&$K$9$l$P=|5n$G$-$^$9!#(B
$B<!$N$h$&$J:8:F5"@-$r;}$D@8@.5,B'$,$"$C$?$H$7$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>A</mi><mo>&RightArrow;</mo><mi>A</mi><mi>&alpha;</mi><mo>|</mo><mi>&beta;</mi>
</math>
</div>
<p>
A $B$OHs=*C<5-9f$G!"(B&alpha; $B$H(B &beta; $B$OHs=*C<5-9f!"=*C<5-9f$+$i$J$kNs$r(B
$BI=$7!"(B&beta; $B$O(B A $B$G;O$^$i$J$$$H$7$^$9!#(B
$B$3$N;~!"<!$N$h$&$K=q$-D>$9$H:8:F5"@-$,$J$/$J$j$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="left center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>A</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>&beta;</mi><mi>A</mi><mo>'</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>A</mi><mo>'</mo><maligngroup/><mo>&RightArrow;</mo>
<maligngroup/><mi>&alpha;</mi><mi>A</mi><mo>'</mo>
<mo>|</mo>
<mi>&epsilon;</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<p>
$B>e$NB-$7;;$r2r<a$9$kJ8K!(BG<sub>1</sub>$B$N:8:F5"@-$r=|5n$9$k$H<!$N$h$&$K(B
$B$J$j$^$9!#(B
</p>
<h4>$BJ8K!(B G<sub>2</sub></h4>
<p>
=({$BOB(B, $BOB(B'},{$B?t(B, +}, P<sub>2</sub>, $BOB(B)
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B</mi><mo>'</mo><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>+</mi>
<mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo><mo>|</mo><mi>&epsilon;</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<h3>$B:F5"E*2<8~$-9=J82r@OK!(B</h3>
<p>
$BJ8K!$KBP$7$F!":8JU$+$i1&JU$X$NF3=P$,!"<!$N0lJ8;z$rFI$`$@$1$G7hDj$G$-$l(B
$B$P!"$=$NJ8K!$r(B<dfn>LL(1)</dfn> $BJ8K!$H8@$$$^$9!#(B
$B<!$N0lJ8;z$rFI$`$@$1$G7hDj$G$-$k$+$I$&$+$O<!$N7W;;$r9T$&$3$H$GH=Dj$G$-(B
$B$^$9!#$J$*<!$N0lJ8;z$rFI$s$G%W%m%0%i%`$N<!$NF0$-$r7h$a$^$9$N$G!"F~NOJ8(B
$B;z$,=*$C$?$3$H$r<($9FC<l$JJ8;z$r9M$($k$3$H$,$"$j$^$9!#(B
</p>
<p>
LL(1)$BJ8K!$O<!$N$h$&$K7A<02=$G$-$^$9!#(B
&alpha; $B$OHs=*C<5-9f!"=*C<5-9f$+$i$J$kNs$H$7$^$9!#(B
$B$^$?(B A $B$OHs=*C<5-9f$H$7$^$9!#(B
$B$3$N;~(B First(&alpha;), Follow(A), Director(A,&alpha;) $B$r<!$N$h$&$KDj5A(B
$B$7$^$9!#(B
</p>
<dl>
<dt>First(&alpha;):</dt>
<dd>&alpha; $B$+$iF3=P2DG=$JNs$N@hF,$K$J$j$&$k=*C<5-9f$N=89g!#(B
$B$b$7!"(B&alpha; $B$+$i(B &epsilon; $B$XF3=P2DG=$J$i!"(B&epsilon; $B$b4^$a$^$9!#(B
</dd>
<dt>Follow(A):</dt>
<dd>$B3+;O5-9f$+$iF3=P$r$7$?;~!"(B A $B$ND>8e$K$J$j$&$k=*C<5-9f$N=89g!#(B</dd>
<dt>Director(A,&alpha;):</dt>
<dd>First(&alpha;) $BC"$7!"(B &alpha; $B$+$i(B &epsilon; $B$XF3=P2DG=$J$i(B
Follow(A) $B$b4^$a$^$9!#(B</dd>
</dl>
<p>
$BJ8K!(B G<sub>2</sub>$B$K$D$$$F$3$l$i$r7W;;$9$k$H<!$N$h$&$K$J$j$^$9!#(B
$B$J$*!"?t<0$N:G8e$H$7$F(B = $B$,$"$k$3$H$H$7!"(BDirector $B$O@8@.5,B'$K4X$9$k$b(B
$B$N$@$15a$a$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>First</mi><mo>&ApplyFunction;</mo><mfenced><mrow><mi>$BOB(B</mi><mo>'</mo></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>+</mi> <mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>First</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>$B?t(B</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Follow</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Follow</mi><mo>&ApplyFunction;</mo><mfenced><mrow><mi>$BOB(B</mi><mo>'</mo></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Director</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi>
<mrow><mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>$B?t(B</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Director</mi><mo>&ApplyFunction;</mo><mfenced>
<mrow><mi>$BOB(B</mi><mo>'</mo></mrow>
<mrow><mo>+</mo><mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>+</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Director</mi><mo>&ApplyFunction;</mo><mfenced>
<mrow><mi>$BOB(B</mi><mo>'</mo></mrow>
&epsilon;
</mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<p>
$B$3$N$h$&$K$9$Y$F$NHs=*C<5-9f$KBP$7$F!"$=$N@8@.5,B'$r<($9(B Director $BF1;N(B
$B$K6&DLItJ,$,$J$$J8K!$r(B LL(1) $BJ8K!$H8@$$$^$9!#(B
G<sub>2</sub> $B$O(B $B7W;;$7$?(B Director $B$K6&DLItJ,$,$J$$$N$G(B LL(1) $BJ8K!$G$9!#(B
</p>
<p>
$B$J$*(B G<sub>1</sub> $B$K$D$$$F$bF1MM$K7W;;$9$k$H<!$N$h$&$K$J$j$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>First</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>$B?t(B</mi> <mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Follow</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>+</mi> <mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Director</mi><mo>&ApplyFunction;</mo><mfenced><mi>$BOB(B</mi>
<mrow><mi>$B?t(B</mi></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>$B?t(B</mi> <mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/>
<mi>Director</mi><mo>&ApplyFunction;</mo><mfenced>
<mrow><mi>$BOB(B</mi></mrow>
<mrow><mi>$BOB(B</mi><mo>+</mo><mi>$B?t(B</mi></mrow></mfenced>
<maligngroup/><mo>=</mo>
<maligngroup/>
<mfenced open="{" close="}">
<mi>$B?t(B</mi> <mi>=</mi>
</mfenced>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<p>
$B$3$N$h$&$K(B Director($BOB(B, $B!&(B) $B$K=EJ#$,$"$j$^$9$N$G!"(B LL(1)$BJ8K!$G$O$"$j$^(B
$B$;$s!#(B
</p>
<p>
LL(1) $BJ8K!$O!"@h$K<($7$?AGKQ$J4X?t8F=P$K$h$k9=J82r@O$KBP$7$F!"<!$KMh$k(B
$B$b$N$rH=CG$7$F9=J85,B'$rJQ$($k$3$H$G9=J82r@O$,$G$-$k$h$&$K$J$j$^$9!#(B
</p>
<ol>
<li>$B3FHs=*C<5-9f$KBP1~$7$?4X?t$r:n$j$^$9!#$3$3$G$O(B A $B$H$7!":n$k4X?t$r(B
A() $B$H$7$^$9!#(B
</li>
<li>
Director(A,$B!&(B)$B$K1~$8$F%W%m%0%i%`$r=q$-$^$9!#(B
Director(A, $B&A(B)={x}, Director(A, $B&B(B)={y} $B$N;~!"<!$N$h$&$K$J$j$^$9!#(B
<pre><code>
A(){
  if($BJ8;z(B =='x'){
     if($B&A$N=hM}(B){
       return Ok;
     }
  }else if($BJ8;z(B=='y'){
     if($B&B$N=hM}(B){
       return Ok;
     }
  }
  return NG;
}
</code></pre>
</li>
</ol>
<p>
$B>e$N(B G<sub>2</sub> $B$bF1MM$K(B Director $B$K$h$j<!$N$h$&$K7W;;$G$-$^$9(B($B$o(B
$B$+$j$d$9$$$h$&$KF|K\8l$r;H$C$F$^$9$N$G!"$3$N$^$^$G$OF0$-$^$;$s(B)$B!#(B
</p>
<pre><code>
void $BOB(B(){
   if($B<!(B==$B?t(B){
      $B<!$rFI$`(B;
      if($BOB(B'()){
        return Ok;
      }
   }
   return NG;
}
void $BOB(B'(){
   if($B<!(B=='='){ /* Director($BOB(B',&epsilon;) */
     return Ok;
   }else if($B<!(B=='+'){ /* Director($BOB(B',+$B?tOB(B') */
     $B<!$rFI$`(B;
     if($B<!(B==$B?t(B){
       $B<!$rFI$`(B;
       if($BOB(B'()){
         return Ok;
       }
     }
   }
   return NG;
}  
main(){
  $B<!$rFI$`(B;
  if($BOB(B()){
    return Ok;
  }
  return NG;
}
</code></pre>
<p>
$B$J$*(B Pascal $B$H$$$&%W%m%0%i%_%s%08@8l$O(B LL(1) $B8@8l$G$9!#(B
</p>
<h3>$B9=J82r@O$N0UL#IU$1(B</h3>
<p>
$B9=J82r@O$N<jB3$-$K$*$$$F!"=PNO$r9M$($^$9!#(B
$B$3$l$O9=J8$K0UL#$rM?$($k$3$H$K$J$j$^$9!#(B
</p>
<p>
$B$3$3$G$O!"?t<0$+$i9=J82r@OLZ$r:n$j!"<B:]$K?t<0$NCM$r7W;;$9$k$3$H$r9M$((B
$B$^$9!#(B
$B;O$a$K(B G<sub>1</sub> $B$r9M$($^$9!#(B
$B3F%k!<%k$G!"<!$N$h$&$KLZ$,:n$i$l$^$9!#(B
</p>
<table border="1">
<thead>
<tr>
<th>$B%k!<%k(B</th>
<th>$B5!3#E*$J9=J82r@OLZ(B</th>
<th>$B?t<0$N9=B$(B</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>&RightArrow;</mo><mi>$BOB(B</mi><mi>+</mi><mi>$B?t(B</mi>
</math>
</td>
<td>
<img src="t1p1.png" alt="$B%k!<%k(B1$B$NF3=PLZ(B" width="232" height="95"/>
</td>
<td>
<img src="g1p1.png" alt="$B%k!<%k(B1$B$G$N7W;;(B" width="296" height="156"/>
</td>
</tr>
<tr>
<td>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>&RightArrow;</mo><mi>$B?t(B</mi>
</math>
</td>
<td>
<img src="t1p2.png" alt="$B%k!<%k(B2$B$NF3=PLZ(B" width="157" height="102"/>
</td>
<td>
<img src="g1p2.png" alt="$B%k!<%k(B2$B$NF3=PLZ(B" width="231" height="106"/>
</td>
</tr>
</tbody>
</table>
<p>
$BOB$NItJ,$r9M$($k$H!"F3=P$K$h$jLZ$N2<$NJ}$K0\F0$7$F$$$/$N$G!">e$+$i2<$X(B
$BLZ$r:n$C$F$$$/(B

$B0lJ}(B G<sub>2</sub> $B$O(B
$B<!$N$h$&$KLZ$,:n$i$l$^$9!#(B
</p>
<table border="1">
<thead>
<tr>
<th>$B%k!<%k(B</th>
<th>$B5!3#E*$J9=J82r@OLZ(B</th>
<th>$B?t<0$N9=B$(B</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>&RightArrow;</mo><mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo>
</math>
</td>
<td>
<img src="t2p1.png" alt="$B%k!<%k(B1$B$NF3=PLZ(B" width="243" height="85"/>
</td>
<td>
<img src="g2p1.png" alt="$B%k!<%k(B1$B$N7W;;(B" width="296" height="156"/>
</td>
</tr>
<tr>
<td>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>'</mo><mo>&RightArrow;</mo>
<mi>+</mi>
<mi>$B?t(B</mi><mi>$BOB(B</mi><mo>'</mo>
</math>
</td>
<td>
<img src="t2p2.png" alt="$B%k!<%k(B2$B$NF3=PLZ(B" width="243" height="107"/>
</td>
<td>
<img src="g2p2.png" alt="$B%k!<%k(B2$B$N7W;;(B" width="266" height="156"/>
</td>
</tr>
<tr>
<td>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>'</mo><mo>&RightArrow;</mo><mi>&epsilon;</mi>
</math>
</td>
<td>
$B$=$N$^$^(B
</td>
</tr>
</tbody>
</table>
<p>
$B$3$N>l9g!"2<$+$i>e$XLZ$r:n$k$3$H$K$J$j$^$9!#(B
$B$3$l$r>e$K<($7$?%W%m%0%i%`$rMxMQ$7$F!"<!$N$h$&$K@8@.$5$;$k$^$9!#(B
</p>
<pre><code>
<em>typedef struct tr {
  char *item ;
  struct tr *left,*right;
} TREE;
TREE *root=NULL;</em>
void $BOB(B(){
   $B?t$rFI$_9~$`(B;
   <em>root=(TREE *)malloc(sizeof(TREE));
   root-&gt;item=$B?t(B;
   root-&gt;left=NULL;
   root-&gt;right=NULL;</em>
   $B<!$rFI$`(B;
   $BOB(B'();
}
void $BOB(B'(){
   TREE *op,*num;
   if($B<!(B=='='){ /* Director($BOB(B',&epsilon;) */
     return;
   }else if($B<!(B=='+'){ /* Director($BOB(B',+$B?tOB(B') */
     +$B$rFI$_9~$`(B;
     <em>op=(TREE *)malloc(sizeof(TREE));
     op-&gt;item="+";
     op-&gt;left=root;</em>
     $B<!$rFI$`(B;
     $B?t$rFI$_9~$`(B;
     <em>num=(TREE *)malloc(sizeof(TREE));
     num-&gt;item=$B?t(B;
     num-&gt;left=NULL;
     num-&gt;right=NULL;
     op-&gt;right=num;
     root=op;</em>
     $B<!$rFI$`(B;
     $BOB(B'();
   }
}  
main(){
  $B<!$rFI$`(B;
  $BOB(B();
}
</code></pre>
<h2><a id="2">12-2. $BLZ$NC5:w$HI=<((B</a></h2>
<p>
$BLZ$NFbIt$r8!:w!"I=<($9$k:]$K!"=g=x$rJ#?t7h$a$k$3$H$,$G$-$^$9!#(B
$B0JA0$O!VLZ$N:8B&$r=hM}!W!"!VCmL\D:E@$rI=<(!W!"!VLZ$N1&B&$r=hM}!W(B
$B$H!"$b$C$H$b?<$$D:E@$+$i=g$KI=<($5$l$kI=<(K!$r>R2p$7$^$7$?!#(B
$B$3$l$r(B <dfn>$B?<$5M%@hC5:w(B</dfn> $B$H8@$$$^$9!#(B
$B0lJ}!"F1$8?<$5$4$H$KC5:w!"I=<($9$k$3$H$b$"$j$^$9!#$3$l$r(B <dfn>$BI}M%@hC5(B
$B:w(B</dfn>$B$H8@$$$^$9!#(B
</p>
<p>
$B$^$?!"?<$5M%@hC5:w$K4X$7$F$b!VLZ$N:8B&$r=hM}!W!"!VCmL\D:E@$rI=<(!W!"(B
$B!VLZ$N1&B&$r=hM}!W$NB>$K$b!"$3$l$i$N=PNO$N=gHV$rJQ$($kJ}K!$,9M$($i$l$^(B
$B$9!#(B
$B$3$3$G!"Nc$($P!"<!$N$h$&$J9=J82r@OLZ$,F@$i$l$?$H$7$^$9!#(B
</p>
<div>
<img src="tree.png" alt="$B9=J82r@OLZ(B" width="161" height="157"/>
</div>
<p>
$B$=$N;~!VLZ$N:8B&$r=hM}!W!"!VCmL\D:E@$rI=<(!W!"(B $B!VLZ$N1&B&$r=hM}!W$H$9(B
$B$l$PCfCV5-K!$NI=<($H0lCW$7$^$9!#0lJ}(B
$B!VLZ$N:8B&$r=hM}!W!"(B $B!VLZ$N1&B&$r=hM}!W!"!VCmL\D:E@$rI=<(!W$H$9$k$H8e(B
$BCV5-K!(B($B5U%]!<%i%s%I5-K!(B)$B$H0lCW$7$^$9!#(B
</p>
<h4>$B1i=,(B12-1</h4>
<p>
$B0J>e$N5DO@$K$h$j!"?t<0(B($BB-$7;;$N$_(B)$B$r5U%]!<%i%s%I5-K!$KJQ49$9$k%W%m%0%i(B
$B%`$r:n$j$J$5$$!#(B
</p>
<h3>$B40A4$J?t<0=hM}(B</h3>
<p>
$B$3$3$^$G$OB-$7;;$N$_$N?t<0$r;H$C$F!"J8K!!"9=J82r@O!"9=J82r@O$K$h$k7W;;(B
$B$N<jK!$r>R2p$7$^$7$?!#(B
$B$3$3$G$O!"40A4$J?t<0$NJ8K!$rM?$($^$9!#(B
</p>
<p>
$B$^$:!"$+$1;;$r9M$($^$9!#$+$1;;$@$1$N<0$N>l9g$O7W;;$N=g=x$J$I$OB-$7;;$H(B
$BF1MM$G$9!#$7$?$,$C$F!"$+$1;;$@$1$N%k!<%k$r9M$($k$H<!$N$h$&$K$J$j$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B@Q(B</mi><mi>*</mi><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<p>
$B$3$3$G!"@Q$HOB$NM%@h=g0L$r9M$($^$9!#(B
$B@Q$NJ}$,M%@h$5$l$^$9$N$G!"@Q$r7W;;$7$?8e!"OB$r7W;;$7$^$9!#(B
$B$3$l$r<B8=$5$;$k$K$O!"OB$N7W;;$G!V?t!W$H$$$&=*C<5-9f$r7W;;$NBP>]$K$7$^(B
$B$7$?$,!"@Q$r7W;;$NBP>]$KJQ99$7$^$9!#(B
$BJQ99$7$?8e$N%k!<%k$O<!$N$h$&$K$J$j$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$BOB(B
</mi><mi>+</mi><mi>$B@Q(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B@Q(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B@Q(B</mi><mi>*</mi><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>

<p>
$B$5$i$K3g8L$N=hM}$r9M$($^$9!#(B
$B3g8L$NCf$K$O$I$s$J<0$bF~$j$^$9!#0lJ}3g8L$O$=$NCf$NCM$r7W;;$7$?$i!"7W;;(B
$B$NBP>]$H$J$kCM$H$7$F?t$HF1$8$h$&$K07$o$l$^$9!#(B
$B:#$^$G!V?t!W$H$$$&=*C<5-9f$r;H$C$F$-$^$7$?$,!"$3$3$G!VCM!W(B
$B$H$$$&Hs=*C<5-9f$rF3F~$7$^$9!#(B
$B$9$k$H!"CM$K4X$9$k%k!<%k$O<!$N$h$&$K$J$j$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BCM(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>(</mi><mi>$BOB(B</mi><mi>)</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BCM(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<p>
$B$3$l$i$r$9$Y$F$^$H$a$k$H40A4$J?t<0=hM}$NJ8K!(B G<sub>3</sub>$B$rDj5A$G$-$^(B
$B$9!#(B
</p>
<h4>$BJ8K!(B G<sub>3</sub></h4>
<p>
=({$BOB(B, $B@Q(B, $BCM(B},{$B?t(B, +, *, (, )}, P<sub>3</sub>, $BOB(B)
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mtable groupalign="right center left">
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$BOB(B
</mi><mi>+</mi><mi>$B@Q(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BOB(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B@Q(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B@Q(B
</mi><mi>*</mi><mi>$BCM(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$B@Q(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$BCM(B</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BCM(B
</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>(</mi><mi>$BOB(B</mi><mi>)</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<maligngroup/><mi>$BCM(B</mi><maligngroup/><mo>&RightArrow;</mo><maligngroup/><mi>$B?t(B</mi>
</mrow>
</mtd>
</mtr>
</mtable>
</math>
</div>
<h4>$B1i=,(B12-2</h4>
<p>
$B<!$N?t<0$N9=J82r@OLZ$r=q$-$J$5$$!#(B
</p>
<ol>
<li>1 + 2 + 3</li>
<li>1 * 2 + 3</li>
<li>1 + 2 * 3</li>
<li>(1 + 2) * 3</li>
<li>1 * (2 + 3)</li>
</ol>
<h4>$B1i=,(B12-3</h4>
<p>
G<sub>3</sub> $B$r3HD%%P%C%+%9!&%J%&%"5-K!$G=q$-$J$5$$(B
</p>
<h4>$B1i=,(B12-4</h4>
<p>
G<sub>3</sub> $B$N:8:F5"@-$r<h$j=|$$$?J8K!(B G<sub>4</sub> $B$r5a$a$J$5$$!#(B
</p>
<h4>$B1i=,(B12-5</h4>
<p>
G<sub>4</sub> $B$N3FF3=P5,B'$KBP$7$F(B Director $B$r5a$a!"(B LL(1)$BJ8K!$G$"$k$3(B
$B$H$r3N$+$a$J$5$$!#(B
</p>
<h4>$B1i=,(B12-6</h4>
<p>
$BCfCV5-K!$G=q$+$l$??t<0$r5U%]!<%i%s%I5-K!$KJQ49$9$k%W%m%0%i%`$r=q$-$J$5(B
$B$$!#(B
</p>
<h4>$B1i=,(B12-7</h4>
<p>
$B?t<0$r7W;;$9$k%W%m%0%i%`$r=q$-$J$5$$!#(B
</p>

<h3>$B3HD%%P%C%+%9!&%J%&%"5-K!(B</h3>
<p>
$B3HD%%P%C%+%9!&%J%&%"5-K!$O!"%P%C%+%9!&%J%&%"5-K!$KCf3g8L$K$h$k7+JV$7$N(B
$B5-K!$rIU$12C$($?$b$N$G$9!#(B
$B$^$?!"4]3g8L$NCf$K(B | $B$r;H$&$3$H$G!"3g8LFb$rA*Br$G$-$^$9!#(B
$BNc$($P!"3HD%%P%C%+%9!&%J%&%"5-K!$r;H$&$H!">e$NB-$7;;$O!V(B+ $B?t!W$rG$0U$N(B
$B2s?t7+JV$7$?$b$N$H$7$F<!$N$h$&$K=q$/$3$H$,$G$-$^$9!#(B
</p>
<div>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>$BOB(B</mi><mo>&RightArrow;</mo><mi>$B?t(B</mi><mo>{</mo><mi>+</mi><mi>$B?t(B</mi><mo>}</mo>
</math>
</div>


<hr />
<address>
$B:dK\D>;V(B <a href="mailto:sakamoto@c.dendai.ac.jp">&lt;sakamoto@c.dendai.ac.jp&gt;</a>
<br />
$BEl5~EE5!Bg3X9)3XIt>pJsDL?.9)3X2J(B
</address>
</body>
</html>
