TKOZさんありがとうございます。今自分が作っているプログラムはLR構文解析表をつかって作ろうとしているのですが、どこで計算が終わるかの条件として
1+2
の後ろに何かないか疑問に思ったのですが、すいませんあいまいな質問をしてしまって。
下記に自分が作ったLR構文解析表を記しました。別にこれがどうこうということではないのですが、
一応こういうプログラムを作るということで、貼っておきます。
何度もすいませんが、1+2を
int c;
c=getchar();
でキーボード入力したら、2の後ろになにか文字みたいなものがつくのでしょうか?
#include<stdio.h>
#include<ctype.h>
int gettoken(int *);
int c;
int main(void)
{
struct sr{
char s;
int n;
};
struct sr pta[12][6]={
/* i + * ( ) $ */
{{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //0
{{'s',0},{'s',6},{'e',0},{'e',0},{'e',0},{'a',0}}, //1
{{'e',0},{'r',2},{'s',7},{'e',0},{'r',2},{'r',2}}, //2
{{'e',0},{'r',4},{'r',4},{'e',0},{'r',4},{'r',4}}, //3
{{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //4
{{'e',0},{'r',6},{'r',6},{'e',0},{'r',6},{'r',6}}, //5
{{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //6
{{'s',5},{'e',0},{'e',0},{'s',4},{'e',0},{'e',0}}, //7
{{'e',0},{'s',6},{'e',0},{'e',0},{'s',11},{'e',0}},//8
{{'e',0},{'r',1},{'s',7},{'e',0},{'r',1},{'r',1}},//9
{{'e',0},{'r',3},{'r',3},{'e',0},{'r',3},{'r',3}},//10
{{'e',0},{'r',5},{'r',5},{'e',0},{'r',5},{'r',5}} //11
};
int ptg[12][3]={
{1,2,3},
{0,0,0},
{0,0,0},
{0,0,0},
{8,2,3},
{0,0,0},
{0,9,3},
{0,0,10},
{0,0,0},
{0,0,0},
{0,0,0},
{0,0,0}
};
この後ろに、トークンの切り取りと、生成規則の条件があります。