4ex4.cpp

来自「学习编译原理的实用教程.教程共分7章: 第1章 编译系统概述 第2章 词法分」· C++ 代码 · 共 68 行

CPP
68
字号
//第4章 习题4⑤
//S→fCtSS'|a
//S'→eS|j
//C→i
#include "fstream.h"
#include "iostream.h"
#include "stdlib.h"
void S();//函数原型
void S1();//用S1表示S'
void C();
char t; //定义字符变量,存放单词种别。
ifstream cinf("lex_r.txt",ios::in); //从文件lex_r.txt输入数据
void main(void)
{
	cinf>>t;cout<<t;//读一个单词的种别并显示
	S();
	if(t=='#')
		cout<<endl<<"ok"<<endl;
	else
		cout<<endl<<"err in main()"<<endl;
}
void S()//S→fCtSS'|a
{
	if(t=='a'){
		cinf>>t;cout<<t;//读一个单词的种别并显示
	}
	else if(t=='f'){
		cinf>>t;cout<<t;//读一个单词的种别并显示
		C();
		if(t=='t'){
			cinf>>t;cout<<t;//读一个单词的种别并显示
			S();S1();
		}
		else{
			cout<<endl<<"err in S(1)"<<endl;exit(0);
		}
	}
	else{
		cout<<endl<<"err in S(2)"<<endl;exit(0);
	}
}
void S1()//S'→eS|j
{
	if(t=='e'){
		cinf>>t;cout<<t;//读一个单词的种别并显示
		S();
	}
	else if(t=='j'){
		cinf>>t;cout<<t;//读一个单词的种别并显示
	}
	else{
		cout<<endl<<"err in S1()"<<endl;
		exit(0);
	}
}
void C()
{
	if(t=='i'){
		cinf>>t;cout<<t;//读一个单词的种别并显示
	}
	else{
		cout<<endl<<"err in C()"<<endl;
		exit(0);
	}
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?