输入输出文法1

Input

 8
E E+T
T T*F
E T
T F
F (E)
F i
E E-T
T T/F

Output

G[E]:
E::=E+T | T | E-T
T::=T*F | F | T/F
F::=(E) | i

 

#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
int main(int argc, char const *argv[])
{
	struct  { int Nv;string VN[10];} Vns={3,"E","T","F"};
	struct  { int Nt;string VT[10];} Vts={7,"+","-","*","/","(",")","i"};
	struct  { int Np;string PL[20],PR[20];} ps={0};
	string S="E"; 
	int N;
	cin >> N;
	std::map<string, vector<string> > m;
	while(N--){
		string a;
		string b;
		cin >> a >> b;
		m[a].push_back(b);
	}

	// print
	cout << "G[" << S << "]:" << endl;
	for (int i = 0; i < Vns.Nv; ++i)
	{
		cout << Vns.VN[i] << "::=";
		for(int j = 0; j < m[Vns.VN[i]].size(); j++){
			if(j < m[Vns.VN[i]].size()-1)
				cout << m[Vns.VN[i]][j] << " | ";
			else
				cout << m[Vns.VN[i]][j];
		}
		cout << endl;
	}
	return 0;
}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验2 文法读入、判定和处理 一、实验目的 熟悉文法的结构,了解文法在计算机内的表示方法。 二、实验内容 1、 设计一个表示文法的数据结构; 2、 从文本文件中读入文法,利用定义的数据结构存放文法,并输出; 3、 本实验结果将来还有用。 三、实验要求 1、 了解文法定义的4个部分: G(Vn, Vt, S, P) Vn 文法的非终结符号集合,在实验中用大写的英文字母表示; Vt 文法的终结符号集合,在实验中用小写的英文字母表示; S 开始符号,在实验中是Vn集合中的一个元素; P 产生式,分左部和右部,左部为非终结符号中的一个,右部为终结符号或非终结符号组成的字符串,如S->ab|c 2、 根据文法各个部分的性质,设计一个合理的数据结构用来表示文法, 1) 若使用C语言编写,则文法可以设计成结构体形式,结构体中应包含上述的4部分, 2) 若使用C++语言或java语言编写,则文法可以设计成文法类形式,类中至少含有4个数据成员,分别表示上述4个部分 文法数据结构的具体设计由学生根据自己想法完成,并使用C或C++语言或Java实现设计的数据结构。 3、 利用完成的数据结构完成以下功能: 1) 从文本文件中读入文法文法事先应写入文本文件); 2) 根据文法产生式的结构,分析出文法的4个部分,分别写入定义好的文法数据结构的相应部分; 3) 整理文法的结构,判断该文法文法类型,是否为0型,1型,2型或3型文法,并输出判断结果; 4) 在计算机屏幕或者文本框中输出文法文法输出按照一个非终结符号一行,开始符号引出的产生式写在第一行,同一个非终结符号的候选式用“|”分隔的方式输出
### 回答1: 文法的机内表示通常是一种形式化的描述方式,它可以用数学符号或者计算机语言来表示。例如,在编写编译器时,可以使用上下文无关文法(Context-free Grammar, CFG)来描述程序的语法规则,CFG可以用BNF(巴克斯范式)或EBNF(扩展巴克斯范式)等形式表示。在自然语言处理领域,可以使用句法树或依存树等结构来表示句子的结构。 输入输出是指用户与计算机之间的交互。在编写编译器时,输入通常是源代码文件,输出通常是目标代码文件或者编译错误信息。在自然语言处理领域,输入通常是一段文本或语音,输出通常是词汇、句法结构、语义等信息。对于人机对话系统,输入是用户的话语或文本,输出是机器生成的回复。 ### 回答2: 文法是一种形式语言,用于描述自然语言或编程语言的语法规则。在计算机科学中,文法的机内表示是将文法转换为计算机可以理解和处理的形式。 机内表示主要包括两个方面:文法的存储表示和文法解析的输入输出。 对于文法的存储表示,一种常见的方法是使用产生式表示法。产生式是一种形式化的语法规则,由一个非终结符和一个候选的符号序列组成。在计算机中,可以使用BNF(巴科斯-瑙尔范式)或其他等价的表示方法来存储文法。BNF使用产生式和一组终结符定义了语言的语法。 另一方面,文法解析的输入输出是指将待解析的语句作为输入,然后根据文法规则进行解析,最终产生一个合法的语法树或分析结果。输入输出可以通过文件、控制台或网络等方式进行。 在计算机科学中,为了实现文法的解析和处理,通常会使用编译器或解释器来进行。编译器将源代码转换为目标代码,解释器则逐行解析执行源代码。 文法的机内表示和输入输出文法在计算机中实际应用的关键环节。通过合适的机内表示方法,计算机可以读取和存储文法规则,使得对文法的处理更加高效和准确。同时,良好的输入输出设计能够提供友好的使用界面,方便用户使用和理解所需操作。综上所述,文法的机内表示和输入输出在计算机中的应用具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值