由正规文法构造正规式 年级_______ 专业________ 学号________ 姓名__________ 一、实验目的要求 输入:任意的正规文法。 输出:相应的正规式。 二、实验原理 一个正则表达式的值是正则集,它是正则语言的另一种表示法。不难看出,除了符号Φ 外,一个正则表达式的含义类似于正则文法的一个非终结符号规则右部的含义。例如,对于<数字> ::= 0/1/2/…/9,由非终 结 符 数 字 所 产 生 的 字 符 串 集 合 与 正 则 表 达 式0/1/2/…/9 所定义的字符串集合是相同的。正则集Φ ,它对应一个不包含任何句子的语言,引进的目的主要是为了理论上的完备性。 三、实验代码: #inclu de #inclu de #inclu de #inclu de u sing namespace std; stru ct Ru le { string left; //规则左部,因为输入的为 2 型文法, string right; //规则右部 }; struct RuleData { string left; vector right; }; class Grammar { private: vector grammar; //文法 Rule rule; //规则 vector Dleft; RuleData ruledata; public: Grammar(){} ~Grammar(){} void ChangeInput (string input); //输入分析 void Show(); // void DataChange (int C); //存储结构转换 vector grammardata; }; void Grammar::ChangeInput (string input) //扫描字符串,遇到'-'停止, { //并跳两格 int help1 = 0; rule.left.erase(); rule.right.erase(); for (int i = 0; i < int (input.size()); i++) { if (input[i] == '-') { help1 = i; break; } rule.left += input[i]; } if (help1 != 1) { cout<<"不符合要求!!"; exit(0); } help1 = help1 + 2; for (int j = help1; j 复杂 { int l = 0; grammardata.clear(); ruledata.left.erase(); ruledata.right.clear(); ruledata.left = grammar[0].left; ruledata.right.push_back (grammar[0].right); grammardata.push_back (ruledata); for (i = 1; i < in...