當前位置:首頁 » 編程軟體 » 編譯原理lr語法分析

編譯原理lr語法分析

發布時間: 2022-03-06 12:50:12

A. 編譯原理LR分析題

{1}. (1)E →E+T →(2) T+T →(4) F+T →(6) 8+T →(3)8+T*F →(4)8+F*F→(6)8+5*F
→(4)8+5*2
{2}.不知道為什麼,是不是我忘了,這個怎麼能出來 『 — 』的?

B. 編譯原理LR分析法中的SLR(1)分析表和LR分析過程、語法樹怎麼求

第二題和第三題拿去,剛做的:


由B->cAa|c就可知該文法不是LR(0)文法了


C. 編譯原理中 「句子」的概念 LR(1)分析法中「L」 「 R」的含義分別是

字母表上符合某種規則構成的串稱作句子。
L:自左至右掃描,R:最右推倒的逆過程。

D. 一個關於編譯原理中LR(1)文法的問題

當·到達最後的時候就可以規約了,當·沒到最後就移入,實際中句子的下一個字元是什麼是確定的,比如在狀態|1,此時句子結束,相當於下一個字元是#,按G->S·#移入,形成G->S#·可以規約;如果在狀態|1,下一個字元是(,就按S->S·(S)#/(移入,這里不存在沖突
展望符的作用是,當同一個狀態里有兩個產生式都可以規約的時候,句子下一個字元與哪個產生式的展望符相同就按哪個規約

E. 編譯原理中LR(0)分析表中的r1、r2等等 是怎麼規則填寫的s1、s2…我明白了,但r規則看不懂

r表示規約 r5表示的就是用第五條產生式進行規約的 至於r填在哪裡嗎 我就舉個例子吧 比如I8 進行規約 就會在H的所有fellow集合上填上r5 希望你能看懂。。。。

F. 編譯原理中,算符優先文法和LR文法什麼關系

算符優先分析法比LR分析(規范歸約)法的歸約速度快。在LR分析一章的語法分析器自動生成工具Yacc中,對算數表達式的歸約往往會用到算符優先關系的概念。算符優先分析的缺點是對文法有一定的限制,在實際應用中往往只用於算數表達式的歸約。由於算符優先分析不是規范歸約,所以可能把不是文法的句子錯誤的歸約成功

G. 編譯原理用C語言實現基於LR(1)或SLR(1)語法分析程序代碼,最好還有報告,急。。。

這個是精簡的語法分析程序,如果符合的話,hi我
給你實驗報告

#include <stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
char a[50] ,b[50];
char ch;
int n1,i1=0,n=5;
int E();int T();int E1();int T1();int F();
void main() /*遞歸分析*/
{
int f,j=0;
printf("請輸入字元串(長度<50,以#號結束)\n");
do{
scanf("%c",&ch);
a[j]=ch;
j++;
}while(ch!='#');
n1=j;
ch=b[0]=a[0];
f=E();
if (f==0) return;
if (ch=='#') printf("accept\n");
else printf("error\n");
}

int E() // E→TE'
{ int f,t;
f=T();
if (f==0) return(0);
t=E1();
if (t==0) return(0);
else return(1);
}

int T() // T→FT'
{ int f,t;
f=F();
if (f==0) return(0);
t=T1();
if (t==0) return(0);
else return(1);
}

int E1()/*E』*/ // E'→+TE'
{ int f;
if(ch=='+') {
b[i1]=ch;
ch=a[++i1];
f=T();
if (f==0) return(0);
E1();
return(1);
}
return(1);
}

int T1()/*T』*/ // T'→*FT'
{
int f,t;
if(ch=='*') {
b[i1]=ch;
ch=a[++i1];
f=F();
if (f==0) return(0);
t=T1();
if (t==0) return(0);
else return(1);}
a[i1]=ch;
return(1);
}

int F() // F→(E)
{ int f;
if(ch=='(') {
b[i1]=ch;
ch=a[++i1];
f=E();
if (f==0) return(0);
if(ch==')') {
b[i1]=ch;
ch=a[++i1];
}
else {
printf("error\n");
return(0);
}
}
else if(ch=='i') {
b[i1]=ch;
ch=a[++i1];
}
else {printf("error\n");return(0);}
return(1);
}

H. 編譯原理 求二到十進制轉換符合LR分析的文法

沒人啊

I. 求編譯原理以表達式文法為基礎構造其LR分析程序.

兄弟,其實這個問題不難,只是我感覺你給的問題不完全,不知道怎麼給你解決,要不我給你個遞歸下降分析方法分析文法的例子吧,你先看看。我估計你看了這個後絕對就明白整體的分析思想了~
文法如下:
S->do s1 begin s2 end while s2
s1->s2mB
s2->AmB
A->B
B->VAL //VAL是所有非關鍵字的字元字元組和數字
m->+|-|*|/|>|<|=

/////////////*語法遞歸分析*/////////////////
int B(int * c,int & q)
{
if(c[q]==13)
{ q++;
return 1;
}
else if(c[q]==5)
{ q++;
return 1;
}
else
}

int A(int * b,int & o)
{
if(B(b,o))
{
return 1;
}
else
}
int OP(int *r,int & v)
{
if(r[v]==6)
{
v++;
return 1;
}
else if(r[v]==7)
{
v++;
return 1;
}
else if(r[v]==8)
{
v++;
return 1;
}
else if(r[v]==9)
{
v++;
return 1;
}
else if(r[v]==10)
{
v++;
return 1;
}
else if(r[v]==11)
{
v++;
return 1;
}
else if(r[v]==12)
{
v++;
return 1;
}
else
}
int S2(int * d,int & h)
{
if(A(d,h))
{
if(OP(d,h))
{
if(B(d,h))
return 1;
else
}
else
}
else
}

int S1(int * d,int & h)
{
if(S2(d,h))
{
if(OP(d,h))
{
if(B(d,h))

return 1;
else
}
else
}
else
}

int S(int *a,int & z)
{
if (a[z++]==1)
{
if (S1(a,z))
{
if (a[z++]==2)
{
if (S2(a,z))
{
if(a[z++]==3)
{
if(a[z++]==4)
{
if(S2(a,z))
{
cout<<"語法分析成功!"<<endl;
return 1;
}
else return 0;
}
else
}
else
}
else return 0;
}
else
}
else return 0;
}
else
}
/////////////////////// 語法分析結束 ////////////////////////

詞法分析中單詞代號 詞法分析中可識別到的所有單詞
1 do
2 begin
3 end
4 while
5 除關鍵字以外的所有字元或字元串
6 +
7 -
8 *
9 /
10 =
11 >
12 <
13 數字
14 結束標識符「#」

自己好好琢磨琢磨吧,其實思想挺簡單的~

J. 編譯原理LR(1)中的R和1分別是什麼意思

優質解答
LR分析法是一種自下而上進行規范歸約的語法分析法,L指從左到右掃描輸入符號串,R是指構造最右推導的逆過程.LR(1)中的1是每次搜索符號需要向前參考一步,即參考下一個符號確定當前構造.
L:Left (左) R:Right (右)

熱點內容
nss存儲 發布:2025-01-20 21:04:47 瀏覽:34
下載了怎麼解壓 發布:2025-01-20 20:55:22 瀏覽:179
c語言第八章答案 發布:2025-01-20 20:55:17 瀏覽:697
安卓主題壁紙怎麼換回來 發布:2025-01-20 20:54:03 瀏覽:626
免費雲存儲排行榜 發布:2025-01-20 20:48:39 瀏覽:231
訪問農信 發布:2025-01-20 20:47:06 瀏覽:2
用什麼循環編譯時間短 發布:2025-01-20 20:46:55 瀏覽:688
醫院his源碼 發布:2025-01-20 20:43:06 瀏覽:983
資料庫結構原理 發布:2025-01-20 20:35:39 瀏覽:9
mysql主從搭建伺服器配置 發布:2025-01-20 20:33:06 瀏覽:11