4ex3.cpp

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

CPP
60
字号
//第4章 习题3⑤
//S→a|^|(T)
//T→T,S|S
#include "fstream.h"
#include "iostream.h"
#include "stdlib.h"
void S( );							//函数原型 
void T( );
void T1( );							//用T1表示T'
char t; 							//定义字符变量,存放单词种别。
ifstream cinf("lex_r.txt",ios::in); //从文件lex_r.txt输入数据
void main( )
{
	cinf>>t;cout<<t;				//读一个单词的种别并显示
	S( );
	if(t=='#')
		cout<<endl<<"ok"<<endl;
	else
		cout<<endl<<"err in main()"<<endl;
}
void S( )							//S→a|^|(T)
{
	if(t=='a'||t=='^'){
		cinf>>t;cout<<t;			//读一个单词的种别并显示
	}
	else
		if(t=='('){
			cinf>>t;cout<<t;		//读一个单词的种别并显示
			T( );
			if(t==')'){
				cinf>>t;cout<<t;	//读一个单词的种别并显示
			}
			else{
				cout<<endl<<"err in S1"<<endl;exit(0);
			}
		}
		else{
			cout<<endl<<"err in S2"<<endl;exit(0);
		}
}
void T( )							//T→ST',用T1表示T'。
{
	if(t=='a'||t=='^'||t=='('){		// if(t∈first(S))
		S( );T1( );
	}
	else{
		cout<<endl<<"err in T( )"<<endl;exit(0);
	}
}
void T1()							//T'→,ST'|ε,用T1表示T'。
{
	if(t==','){
		cinf>>t;cout<<t;			//读一个单词的种别并显示
		S( );T1( );
	}
	else if(t!=')'){				// if(!t∈follow(T1))
		cout<<endl<<"err in T1( )"<<endl;exit(0);
	}
}

⌨️ 快捷键说明

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