国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

編譯原理:算符優(yōu)先分析實(shí)驗(yàn)

這篇具有很好參考價(jià)值的文章主要介紹了編譯原理:算符優(yōu)先分析實(shí)驗(yàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

什么是算符優(yōu)先分析法
算符優(yōu)先分析法是一種簡(jiǎn)單、直觀的自下而上分析法
算符優(yōu)先分析法就是仿照算術(shù)表達(dá)式的四則運(yùn)算過(guò)程而設(shè)計(jì)的一種語(yǔ)法分析方法。
這種分析方法首先要規(guī)定運(yùn)算符之間(確切地說(shuō)終結(jié)符之間)的優(yōu)先關(guān)系和結(jié)合性質(zhì),然后借助這種關(guān)系,比較相鄰運(yùn)算符的優(yōu)先級(jí)來(lái)確定句型的可歸約串并進(jìn)行歸約。

分析步驟為:
1、擴(kuò)展文法
S’ →#S#

2、求FIRSTVT()和LASTVT()集合
firstvt(S)={ a,^,( }
firstvt(T)={ , } ∪ firstvt(S) = {, ,a,^,( }
lastvt(S)= { a,^,) }
lastvt(T) = { , } ∪ lastvt(S) = { , ,a,^,) }

3、求優(yōu)先關(guān)系
3.1 首先找 等于關(guān)系(兩個(gè)vt之間只隔一個(gè)vn)
3.2 低于關(guān)系(vt在右,vn在左)
3.3 高于關(guān)系(vn在左,vt在右)
4、構(gòu)造優(yōu)先關(guān)系表
5、算符優(yōu)先分析過(guò)程

一、實(shí)驗(yàn)?zāi)康?/p>

運(yùn)用算符優(yōu)先語(yǔ)法分析的基本原理實(shí)現(xiàn)對(duì)于句子的語(yǔ)法分析

二、實(shí)驗(yàn)要求

1、文法及待分析符號(hào)串由用戶輸入
2、數(shù)據(jù)結(jié)構(gòu)可自行設(shè)計(jì)

三、實(shí)驗(yàn)內(nèi)容

1、任意輸入一個(gè)文法,判斷它是否為簡(jiǎn)單優(yōu)先文法
2、如果是,請(qǐng)構(gòu)造該文法對(duì)應(yīng)的簡(jiǎn)單優(yōu)先分析表
3、輸入一個(gè)字符串,判斷它是否為該文法的一個(gè)句子。

四、實(shí)驗(yàn)代碼文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-463871.html

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <stack>
#include <iomanip>
#include <cstdlib>

using namespace std;

string V[100][2]; //存儲(chǔ)拆分后的文法
int vi = 0; //存儲(chǔ)拆分后有多少行
int t = 0;
int s = 0;
int l;
int r;

string FIRSTVT[20][2]; //存儲(chǔ)firstvt集
string LASTVT[20][2]; //存儲(chǔ)lastvt集
string str; //存儲(chǔ)輸入文法
string str_a = "#"; // 下堆棧
string str_b; // 剩余輸入串
string analysis_table[100][5]; // 文法分析過(guò)程

char table[100][100]; // 算符優(yōu)先關(guān)系表

void init_string(string &a) // 刪除字符串的第一個(gè)元素
{
   
	for (int i = 1; i <= a.length(); ++i)
	{
   
		a[i - 1] = a[i];
	}
}

bool is_CHAR(char c) // 判斷是否為大寫(xiě)字母
{
   
	if (c >= 'A' && c <= 'Z')
	{
   
		return true;
	}
	else
	{
   
		return false;
	}
}

bool is_in(int i, string x) // 判斷從字符串x從最好一個(gè)開(kāi)始算起連續(xù)的i個(gè)字符是否含有非大寫(xiě)字母
{
   
	bool flag = false;
	for (int j = 0; j < i; j++)
	{
   
		if (!is_CHAR(x[x.length() - j - 1]))
		{
   
			flag = true;
		}
	}
	return flag;
}

void split(string a) // 拆分文法,使其不含有|
{
   
	for (int i = 3; i < a.length(); ++i)
	{
   
		V[vi][0] = a[0];
		while (a[i] != '|' && i < a.length())
		{
   
			V[vi][1] += a[i];
			i++;
		}
		vi++;
	}
}

void read_file(string file_path) //按行讀取文件
{
   
	fstream f;
	f.open(file_path.c_str());
	vector<string> words;
	string line;
	while (getline(f, line))
	{
   
		words.push_back(line);
	}
	cout << "輸入文法:" << endl;
	for (int i = 0; i < words.size(); i++)
	{
   
		cout << words[i] << endl;
		split(words[i]);
	}
}

int find_index(char a) //尋找字符a在firstvt或者lastvt中的位置
{
   
	for (int i = 0; i < t; ++i)
	{
   
		if (FIRSTVT[i][0][0] == a)
		{
   
			return i;
		}
	}
	return -1;
}

int find_table_index(char a) //尋找字符a在算符優(yōu)先關(guān)系表中的位置
{
   
	for (int i = 0; i <= s; ++i)
	{
   
		if (table[i][0] == a)
		{
   
			return i;
		}
	}
	return -1;
}

void get_start() //獲取非終結(jié)符
{
   
	for (int i = 0; i < vi; ++i)
	{
   
		bool flag = true;
		for (int j = 0; j < t; ++j)
		{
   
			if (FIRSTVT[j][0] == V[i][0])
			{
   
				flag = false;
			}
		}
		if (flag)
		{
   
			FIRSTVT[t][0] = V[i][0];
			LASTVT[t][0] = V[i][0];
			t++;
		}
	}
}

void add_firstvt(string b, int a) //判斷字符串b是否在序號(hào)為a的firstvt中,沒(méi)有則加入
{
   
	for (int s = 0; s < b.length(); ++s)
	{
   
		bool flag = true;
		char c = b[s];
		if (c <= 'Z' && c >= 'A')
		{
   
			continue;
		}
		for (int i = 0; i < FIRSTVT[a][1].length(); ++i)
		{
   
			if (c == FIRSTVT[a][1][i])
			{
   
				flag = false;
			}
		}
		if (flag)
		{
   
			FIRSTVT[a][1] += c;
		}
	}
}

void add_firstvt(

到了這里,關(guān)于編譯原理:算符優(yōu)先分析實(shí)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 編譯原理實(shí)驗(yàn)三:預(yù)測(cè)分析法語(yǔ)法分析器的設(shè)計(jì)

    編譯原理實(shí)驗(yàn)三:預(yù)測(cè)分析法語(yǔ)法分析器的設(shè)計(jì)

    ? 根據(jù)文法編制預(yù)測(cè)分析法語(yǔ)法分析程序,以便對(duì)輸入的符號(hào)串進(jìn)行語(yǔ)法分析。通過(guò)編寫(xiě)預(yù)測(cè)分析法語(yǔ)法分析程序掌握預(yù)測(cè)分析法的基本原理、FIRST和FOLLOW集的計(jì)算、預(yù)測(cè)分析表的構(gòu)造方法以及語(yǔ)法分析法主控程序的設(shè)計(jì)。 對(duì)于給定的上下文無(wú)關(guān)文法,編程完成以下功能:

    2024年02月05日
    瀏覽(92)
  • 【編譯原理實(shí)驗(yàn)】 -- 詞法分析程序設(shè)計(jì)原理與實(shí)現(xiàn)(C語(yǔ)言實(shí)現(xiàn))

    【編譯原理實(shí)驗(yàn)】 -- 詞法分析程序設(shè)計(jì)原理與實(shí)現(xiàn)(C語(yǔ)言實(shí)現(xiàn))

    目錄 目標(biāo)任務(wù) 設(shè)計(jì)要求 一、程序功能描述 二、正則文法 三、程序結(jié)構(gòu)描述 四、代碼 ?五、程序測(cè)試 ?測(cè)試用例1 測(cè)試結(jié)果1 測(cè)試用例2 測(cè)試結(jié)果2 以下為正則文法所描述的 C 語(yǔ)言子集單詞符號(hào)的示例,請(qǐng)補(bǔ)充單詞符號(hào):++,--, , , += , -= ,*=, /= ,(邏輯與),||(邏輯或),

    2024年02月02日
    瀏覽(579)
  • 【編譯原理】 實(shí)驗(yàn)一:詞法分析器的自動(dòng)實(shí)現(xiàn)(Lex詞法分析)

    【編譯原理】 實(shí)驗(yàn)一:詞法分析器的自動(dòng)實(shí)現(xiàn)(Lex詞法分析)

    相關(guān)代碼實(shí)操移步視頻 https://www.bilibili.com/video/BV13x4y1o7FL 1.借助詞法分析工具Flex或Lex完成(參考網(wǎng)絡(luò)資源) 2.輸入:高級(jí)語(yǔ)言源代碼(如helloworld.c) 3.輸出:以二元組表示的單詞符號(hào)序列。 通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)具體的詞法分析程序,加深對(duì)詞法分析原理的理解,并掌握

    2024年02月08日
    瀏覽(95)
  • 【編譯原理】【C語(yǔ)言】實(shí)驗(yàn)三:遞歸下降分析法

    【編譯原理】【C語(yǔ)言】實(shí)驗(yàn)三:遞歸下降分析法

    C語(yǔ)言 實(shí)驗(yàn)環(huán)境:Visual Studio 2019 author:zoxiii ??用高級(jí)語(yǔ)言實(shí)現(xiàn)遞歸下降分析程序。使用輸入串i*(i+i),輸出分析棧中所有內(nèi)容,并給出分析結(jié)果。 ??自頂向下分析就是從文法的開(kāi)始符觸發(fā)并尋找出這樣一個(gè)推導(dǎo)序列:推導(dǎo)出的句子恰好為輸入符號(hào)串;或者說(shuō),能否從根節(jié)

    2023年04月21日
    瀏覽(16)
  • 編譯原理C++單詞拼裝器&詞法分析器實(shí)驗(yàn)思路

    編譯原理C++單詞拼裝器&詞法分析器實(shí)驗(yàn)思路

    本文只涉及功能實(shí)現(xiàn)的思路,針對(duì)期末復(fù)習(xí),不涉及制作操作界面。 實(shí)驗(yàn)內(nèi)容 1. 把C++源代碼中的各類單詞(記號(hào))進(jìn)行拼裝分類。 C++語(yǔ)言包含了幾種類型的單詞(記號(hào)):標(biāo)識(shí)符,,數(shù)(包括整數(shù)、浮點(diǎn)數(shù)),字符串、注釋、特殊符號(hào)(分界符)和運(yùn)算符號(hào)等【詳細(xì)

    2024年04月08日
    瀏覽(90)
  • 【編譯原理】 實(shí)驗(yàn)三 LL(1)分析法(LL1分析表的自動(dòng)生成)

    【編譯原理】 實(shí)驗(yàn)三 LL(1)分析法(LL1分析表的自動(dòng)生成)

    由于代碼較長(zhǎng),csdn對(duì)文章總長(zhǎng)度有字?jǐn)?shù)限制,想只看完整代碼的請(qǐng)移步另一篇博客。 https://blog.csdn.net/qq_46640863/article/details/125705891 理論與習(xí)題講解移步視頻 https://www.bilibili.com/video/BV1zu4y1C7SL 1.實(shí)現(xiàn)LL(1)分析算法 2.輸入:教材中的算術(shù)表達(dá)式文法;待分析的語(yǔ)句(如i+i*i) 3.輸

    2024年02月06日
    瀏覽(21)
  • 編譯原理之LL(1)語(yǔ)法分析實(shí)驗(yàn)(附完整C/C++代碼與測(cè)試)

    編譯原理之LL(1)語(yǔ)法分析實(shí)驗(yàn)(附完整C/C++代碼與測(cè)試)

    先從鍵盤讀入要分析的文法,由程序自動(dòng)構(gòu)造FIRST、FOLLOW 集以及SELECT集合,判斷是否為L(zhǎng)L (1)文法。 分析文法為G[E]: (0)E→ TE’ ? (1)E’→ +TE’ (2)E’→ε??? (3)T→ FT’ (4)T’→ *FT’ ? (5)T’→ε???? (6)F→ (E)?? ?(7)F→a 若符合LL (1)文法,由程序自動(dòng)構(gòu)

    2024年02月04日
    瀏覽(28)
  • HNU-編譯原理-實(shí)驗(yàn)1-利用FLEX構(gòu)造C-Minus-f詞法分析器

    HNU-編譯原理-實(shí)驗(yàn)1-利用FLEX構(gòu)造C-Minus-f詞法分析器

    計(jì)科210X 甘晴void 202108010XXX 詳細(xì)的實(shí)驗(yàn)項(xiàng)目文檔為 https://gitee.com/coderwym/cminus_compiler-2023-fall/tree/master/Documentations/lab1 學(xué)習(xí)和掌握詞法分析程序的邏輯原理與構(gòu)造方法。通過(guò) FLEX 進(jìn)行實(shí)踐, 構(gòu)造 C-Minus-f 詞法分析器。具體完成過(guò)程如下: 學(xué)習(xí) C-Minus-f 的詞法規(guī)則 學(xué)習(xí) FLEX 工具使

    2024年01月20日
    瀏覽(85)
  • 實(shí)驗(yàn)四 :OSPF開(kāi)銷、協(xié)議優(yōu)先級(jí)及計(jì)時(shí)器的修改(抓包分析OSPF)

    實(shí)驗(yàn)四 :OSPF開(kāi)銷、協(xié)議優(yōu)先級(jí)及計(jì)時(shí)器的修改(抓包分析OSPF)

    實(shí)驗(yàn)四 :OSPF開(kāi)銷、協(xié)議優(yōu)先級(jí)及計(jì)時(shí)器的修改(抓包分析OSPF) 實(shí)驗(yàn)?zāi)康? 通過(guò)本次實(shí)驗(yàn),掌握配置OSPF協(xié)議優(yōu)先級(jí)的方法,掌握配置OSPF開(kāi)銷的方法,掌握配置OSPF Hello timer 的方法,掌握配置OSPFDead timer的方法。 實(shí)驗(yàn)環(huán)境: 硬件:PC機(jī) 軟件:windows操作系統(tǒng),ensp 實(shí)驗(yàn)內(nèi)容: OSPF開(kāi)

    2024年02月09日
    瀏覽(16)
  • 編譯原理實(shí)驗(yàn)二——消除一切文法的左遞歸(c++實(shí)現(xiàn))

    編譯原理實(shí)驗(yàn)二——消除一切文法的左遞歸(c++實(shí)現(xiàn))

    首先給出書(shū)中的算法截圖: 第一步:處理產(chǎn)生式的輸入 所有產(chǎn)生式使用一個(gè)結(jié)構(gòu)體存儲(chǔ): 可以看到,left代表產(chǎn)生式的左部,right代表產(chǎn)生式的右部,而且是一個(gè)集合。 例如S-Qc|c,在程序中,left=S,right=Qc,c 輸入的結(jié)果保存在一個(gè)vector的數(shù)據(jù)結(jié)構(gòu)中,并起名為v 輸入函數(shù)為: 由

    2024年02月05日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包