91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 20KB
    文件類型: .cpp
    金幣: 2
    下載: 1 次
    發布日期: 2021-07-01
  • 語言: C/C++
  • 標簽:

資源簡介

使用LL(1)方法實現的語法分析程序,使用C++編程,其中包含消除左遞歸,求非終結符的FIRST、FOLLOW集,求LL(1)分析表以及對輸入字符串的接受過程分析。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
using?namespace?std;

typedef?struct?VN
{
char?symbol;
vector?p;//該非終結符的產生式
vector?first;//該非終結符的FIRST集
vector?follow;//該非終結符的FOLLOW集
}N;//非終結符
typedef??struct?VT
{
char?vt;
}T;//終結符?num?用?n?代替
vector?vn;//定義非終結符集合
vector?vt;//定義終結符集合
vector?>?tab;//分析表

void?getN(vector?*n);//獲取非終結符
void?putN(vector?n);//輸出非終結符
void?getT(vector?*t);//獲取終結符
void?putT(vector?t);//輸出終結符
void?getpRules(vector?*n);//獲取產生式
void?elimiLR(vector?*n);//消除產生式中的左遞歸
void?getFirst(vector?*n);//獲取非終結符的FIRST集
void?getFollow(vector?*n);//獲取非終結符的FOLLOW集
bool?isVN(char?s??vector?n);//判斷符號是否為非終結符
bool?isVT(char?s??vector?t);//判斷符號是否為終結符
bool?isEmptyIn(N?n);//判斷非終結符FIRST集是否含有空元素,有空元素(true);沒空元素(false)
int?getVnPos(char?s?vector?n);//獲取某個非終結符在非終結符集合中的位置
int?getVtPos(char?c?vector?T);//獲取某個終結符在終結符集合中的位置
bool?isExist(char?c?N?n?int?i);//判斷新求得的元素?是否和?FIRST(1)/FOLLOW(2)集?已有元素重復,若重復返回true,不重復返回false
void?analysisTab();//建立帶有同步信息的預測分析表并輸出
void?analysisProc();//預測分析程序并根據同步信息進行錯誤處理

int?main(void)
{
getN(?&vn?);//獲取非終結符
getT(?&vt?);//獲取終結符
getpRules(&vn);//獲取產生式
elimiLR(&vn);//消除左遞歸
getFirst(&vn);//為每個非終結符生成FIRST集
getFollow(&vn);//為每個非終結符生成FOLLOW集
putN(vn);//輸出消除左遞歸后的文法
putT(vt);//輸出文法的終結符
analysisTab();//建立帶有同步信息的預測分析表并輸出該表
analysisProc();//預測分析程序并根據同步信息進行適當錯誤處理
system(“pause“);
return?0;
}

void?getN(vector?*n)//獲取非終結符
{
cout?< char?c;
cin?>>?c;
while?(c?!=?‘$‘)
{
N?temp;
temp.symbol?=?c;
n->push_back(temp);
cin?>>?c;
}
}

void?putN(vector?n)//輸出非終結符
{
cout?< if?(n.size()?>?0)
{
for?(unsigned?int?i?=?0;?i? {
cout?< cout?< if?(n.at(i).p.size()?>?0)
//非終結符的產生式數不為0打印每個產生式
{
cout?< for?(size_t?j?=?0;?j? {//print?every?production?rule

cout?< }
cout?< }
else
{
cout?< }
if?(n.at(i).first.size()?>?0)
//FIRST集個數不為0,打印FIRST集每個元素
{
cout?< for?(size_t?k?=?0;?k? {//打印FIRST集的每個元素
cout?< }
cout?< }
else
{
cout?< }
if?(n.at(i).follow.size()?>?0)
//FOLLOW集個數不為0,打印FIRST集每個元素
{
cout?< for?(size_t?l?=?0;?l? {//打印FOLLOW集的每個元素
cout?< }
cout?< }
else

評論

共有 條評論