1樓:
終極符集合vt=
非終極符集合vi=
最右推導:e => e-t => e-f => e-(e) => e-(t) => e-(t+f) => e-(t+i) => e-(t*f+i)
直接短語:t*f,i
編譯原理中文法g[e]:e::=e+t|t t::=t*f|f f::=(e)|i輸入輸出的程式實現**,急!!!!!
2樓:匿名使用者
我這裡有個差不多的,不過加減乘除都有namespace 遞迴下降呼叫子程式法
你給我郵箱發個郵件 我吧程式法給你吧
// a → bc
// c → (+|-)bc | ε
// b → ed
// e → (a)| i
// d → *ed | ε
private stackst = new stack();
bool j_j = false;//標識外層是否是減法,若是,則內層加減互換
bool c_c = false;//標識乘除的
private float a()
else
if (st.peek() == '-')
else
}c();
return m;
}private float b()
else
}private float c()
else
return m + c();
}else
if (st.count != 0 && st.peek() == '-')
else
}else
}else //if(st.peek()
result += "c →ε\n";
return 0;
}private float d()
if ((st.peek() == '*') || (st.peek() == '/'))
else
return m * d();
}else
if (st.count != 0 && st.peek() == '/')
else
}else
}else
return 0;
}private float e()
if (isdigit(st.peek()))
return num;
}else
if (st.peek() == '(')
else
result += "非法字元!";
}else
result += "缺少「)」";
return m;
}else
result += "錯誤,第" +(codelength- st.count+1).tostring() + "個字應有數字或'('\n";
return 0;
}private bool isdigit(char d)
private string result;
private int codelength;
private void startbtn_click(object sender, eventargs e)
string res = null;
trycatch (exception e1)
if (st.count != 0)
label2.text += result + "第" + (textbox2.text.length - st.count + 1) + "個字元處有錯誤,請仔細檢視\n";
else
label2.text += result + "最終結果是:" + res;}}}
編譯原理問題,關於編譯原理的問題
第乙個問題 編譯時是否有影響無關緊要只是你的原始檔變大了,但是執行起來是沒有影響的。第二個 採用靜態全域性變數是為了在連線多個檔案時防止重名問題出現,因為程式設計師在程式設計時不會乙個人完成乙個較大程式,必需要分工,每個人都用自己的檔案來寫程式,這樣在多個檔案中可能會把名字起重了,比如在本檔案中用s...
請幫忙完成以下的編譯題目,謝謝,C語言的題目,誰幫忙做下,謝謝,
s aacb a aab b bsca s bd b ba c 最左推導是這樣的。至於語法樹,不好畫。還有就是分數太低,10分就做這麼點了。c語言的題目,誰幫忙做下,謝謝,一 1 d 2 a 3 c 4 a 5 d 6 a 7 c 8 d 9 d 10 c 二 1 1 2 3 1 2 3 14 60...
altium 09,明明有錯誤的原理圖,編譯時沒錯誤提示彈出
編譯時錯誤的資訊都儲存在message裡面 不彈出不代表沒有錯誤 altium designer 10畫完原理圖,進行編譯可就是不彈出錯誤視窗,原理圖明明是有錯誤的,按察看 工作區面板 system message,就能開啟message面板,能看到警告和錯誤資訊 單純的schlib檔案要放在乙個p...