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

資源簡介

任意輸入LL(1)文法,自動構造LL(1)分析表并生成相應的語法分析程序,實現LL(1)分析過程;能對輸入串進行語法分析,判斷其是否符合文法。

資源截圖

代碼片段和文件信息

//?LL(1).cpp?:?此文件包含?“main“?函數。程序執行將在此處開始并結束。
//

#include?
#include
#include
#include
#include
#include
#include

using?namespace?std;

mapgetnum;
char?getchar1[100];?????????//獲得對應字符
vectorproce;
int?table[100][100];??????//預測分析表
int?num?=?0;?int?numvt?=?0;?????//numvt是終結符集合,0是‘#’,numvt表空字
string?first[100];
string?follow[200];

void?readin()
{
memset(table?-1?sizeof(table));
getnum[‘#‘]?=?0;
getchar1[0]?=?‘#‘;
cout?< char?x;
do
{
cin?>>?x;
getnum[x]?=?++num;
getchar1[num]?=?x;
}?while?(cin.peek()?!=?‘\n‘);
numvt?=?++num;
getnum[‘@‘]?=?numvt;????????//kong?zi
getchar1[num]?=?(‘@‘);
cout?< do
{
cin?>>?x;
getnum[x]?=?++num;
getchar1[num]?=?x;
}?while?(cin.peek()?!=?‘\n‘);
cout?< string?pro;
while?(cin?>>?pro?&&?pro?!=?“end“)
{
string?ss;
ss?+=?pro[0];
for?(int?i?=?3;?i? {
if?(pro[i]?==?‘|‘)
{
proce.push_back(ss);
ss.clear();?ss?+=?pro[0];
}
else
{
ss?+=?pro[i];
}
}
proce.push_back(ss);
}
}
void?jiaoji(string?&a?string?b)??//a=a?or?b???取ab交集賦值給a
{
setse;
for?(int?i?=?0;?i? se.insert(a[i]);
for?(int?i?=?0;?i? se.insert(b[i]);
string?ans;
set::iterator?it;
for?(it?=?se.begin();?it?!=?se.end();?it++)
ans?+=?*it;
a?=?ans;
}
string?get_f(int?vn?int?&?has_0)?????//dfs:vn能推出的不含空字的vt集合,并且判斷vn能否推出空字
{
if?(vn?==?numvt)has_0?=?1;
if?(vn? string?ans;
for?(int?i?=?0;?i? {
if?(getnum[proce[i][0]]?==?vn)
ans?+=?get_f(getnum[proce[i][1]]?has_0);
}
return??ans;
}
void?getfirst()
{
for?(int?i?=?1;?i?<=?numvt;?i++)?????//終結符,first集是其本身。
{
first[i]?+=?(‘0‘?+?i);
}
for?(int?j?=?0;?j? {
int?k?=?0;?int?has_0?=?0;????????//k掃瞄該產生式
do?{
has_0?=?0;
k++;
if?(k?==?proce[j].size())??//推到最后一個了,則附加空字
{
first[getnum[proce[j][0]]]?+=?(‘0‘?+?numvt);
break;
}?????????????????????//合并之
jiaoji(first[getnum[proce[j][0]]]?get_f(getnum[proce[j][k]]?has_0));
}?while?(has_0);??//到無法推出空字為止
}
}
void?print_first()
{
cout?< for?(int?i?=?1;?i?<=?num;?i++)
{
cout?< for?(int?j?=?0;?j? cout?< cout?< }
cout?<}
void?getfollow()
{
jiaoji(follow[getnum[proce[0][0]]]?“0“);??//先添加‘#’;
for?(int?j?=?0;?j? {
for?(int?jj?=?1;?jj? {
if?(getnum[proce[j][jj]]?<=?numvt)continue;??//vt無follow集
int?k?=?jj;?int?has_0;
do
{
has_0?=?0;
k++;
if?(k?==?proce[j].size())???//都能推出空字,follow集=產生式

評論

共有 條評論