導航:首頁 > 源碼編譯 > 編譯原理ET

編譯原理ET

發布時間:2022-10-15 02:15:15

⑴ 倪志偉的論文專著

近五年來,在國內外學術期刊上公開發表論文30多篇,其中有15篇論文被EI或ISTP收錄。出版的教材或專著有:
1.《Foxpro實用教程》,南京大學出版社,1994年(主編)
2.《用C++建造專家系統》,電子工業出版社,1996年 (副主編)3.《機器學習與智能決策支持系統》,科學出版社,2004年5月(副主編)
4.《編譯原理》,北京希望電子出版社,2005年11月(主編)
5.《現代物流技術》,中國物資出版社,2006年1月(主編)(被評為國家「十一五」規劃教材)
6.《物流信息系統》,中國物資出版社,2006年2月(副主編)
7. 《智能管理技術與方法》,科學出版社,2007年10月(主編)
8. 《動態數據挖掘》,科學出版社,2010年8月(主編)
近年來,發表的主要學術論文如下: [1] Zhangjun Wu, Xiao Liu, Zhiwei Ni, Dong Yuan, Jinjun Chen, Yun Yang: A Market-Oriented Hierarchical Scheling Strategy in Cloud Workflow Systems, Journal of Supercomputing, Volume 63,Issue 1,pp.256-293,2013.(UT WOS:000313166000013).[2] Xiao Liu,Zhiwei Ni,et al.A Novel Statistical Time-Series Pattern based Interval Forecastting Strategy for Activity Durations in Workflow Systems.Journal of Software and system,2011,(84),354-376.(SCI indexed)[3] Liping Ni, Zhiwei Ni, YaZhuo Gao.Stock trend Prediction Based on Fractal Feature Selection and Support Vector Machine.Expert system with applications,2011,(38),5569-5576.(SCI indexed)[4]Xiao Liu,Zhiwei Ni,et al.A probabilistic strategy for temporal constraint management in scientisfic workflow systems.Concurrrency and Computation :Pratice and Experience,2011,23(16),1893-1919.(SCI indexed) [5] Xiao Liu, Zhiwei Ni, Zhangjun Wu, Dong Yuan, Jinjun Chen, Yun Yang: A Novel General Framework for Automatic and Cost-Effective Handling of Recoverable Temporal violations in Scientific Workflow Systems, Journal of Software and System,2011,(84),492-509. (SCI indexed ) [6]Zhiwei Ni,Junfeng guo ,et al.An Efficient Method for Improving Query Efficiency in Data Warehouse.Journal of software,2011,6(5),857-865.[7]高雅卓, 倪志偉等.連續屬性上的OLAP查詢建模方法研究.情報學報,2011,30(4),372-379.[8]張以文,倪志偉等.雲計算環境下動態虛擬企業夥伴選擇模型.計算機科學,2011,38(7),212-215.[9]倪志偉,公維峰等.數據流中隨機型分型維數計算方法研究.計算機科學,2011,38(4),209-212.[10]倪志偉,吳昊等.基於改進的經驗模態分解的時間序列匹配演算法.系統模擬學報,2011,23(11),2395-2399.[11]姜苗,倪志偉等.數據流時間窗口中閉頻繁項集的在線挖掘.中國科學技術大學學報,2011,(8),729-745.[12] Zhangjun Wu, Zhiwei Ni, Lichuan Gu, Xiao Liu: A Revised Discrete Particle Swarm Optimization for Cloud Workflow Scheling, 2010 International Conference on Computational Intelligence and Security (CIS2010), Nanning, China, 11-14 Dec. 2010 (EI indexed) [13] Xiao Liu, Zhiwei Ni, Zhangjun Wu, Dong Yuan, Jinjun Chen, Yun Yang: A Framework for Handling Fine-Grained Recoverable Temporal Violations in Scientific Workflows, 16th IEEE International Conference on Parallel and Distributed Systems (ICPADS2010), Shanghai, China, December 7-11, 2010, on Sept. 05, 2010 (EI indexed). [14] Yazhuo Gao, Zhiwei Ni, Yuxiao Zhao.A scheling strategy for OLAM tasks and its application in a financial BI system Business Intelligence and Financial Engneering .2009會議論文集: 435-440 (EI收錄) [15] Zhiwei Ni, Dan Han, Gongrang Zhang, Yazhuo Gao.Extension CBR Retrieval.AICI2009:224—227 (EI收錄) [16] Zhangjun Wu, Zhiwei Ni,Chang Zhang, Lichuan Gu. A Novel PSO for Multi-stage Portfolios Planning, IEEE International Conference on Artificial Intelligence and Computational Intelligence (AICI2009),71—77 (EI收錄) [17] Chang Zhang, Zhiwei Ni, Zhangjun Wu,Lichuan Gu. A Novel Swarm Model with Quasi-Oppositional Particle, International Forum on Information Technology and Applications (IFITA 2009), pp.325-330 (EI收錄) [18] Li Fenggang, Wang Xiaolu, Ni Zhiwei, Ni Liping. Semantic Analysis Based Literature Transaction System of Xi-An Medical Authority, Intelligent Information Management Systems and Technologies (2010),Volume6,No.3 ,219—226 [19] Xiao Liu, Jinjun Chen, Zhangjun Wu, Zhiwei Ni, Dong Yuan, Yun Yang.Handling Recoverable Temporal Violations in Scientific Workflow Systems: A, Workflow Rescheling Based Strategy,2010,pp.534-537 [20]Chao Wang ,Zhi-wei Ni ,Jun-fen Guo.A Fast Bidirectional Method for Mining Maximal Frequent Itemsets,The Third International Joint Conference on Computational Sciences and Optimization (CSO 2010),447—450 [21]倪志偉,高雅卓,李偉東,束建華.基於矩陣的增量式關聯規則挖掘演算法.計算機工程與應用, 2008,44(13):153-155 [22]劉斌,倪志偉,趙敏.基於屬性重要性的貪心演算法的改進演算法.合肥工業大學學報,2010,33(8):1185-1188 [23]王麗紅,倪志偉, 高雅卓.改進的蟻群演算法求解多目標車間作業調度問題.計算機技術與發展,2008 ,18(10):49—52 [24]吳姍,倪志偉,羅賀,鄭盈盈.一種基於密度的無監督聯系發現方法.中國管理科學,2008,16:29—32 [25]梁敏君,倪志偉,倪麗萍,楊葛鍾嘯.基於網格與分形維數聚類演算法.計算機應用,2009,29(3):830-833 [26]倪麗萍,倪志偉,吳昊,葉紅雲.基於分形維數和蟻群演算法的屬性選擇方法.模式識別與人工智慧, 2009,22(2):293—298(EI收錄) [27]倪志偉,倪麗萍,楊葛鍾嘯.分形技術在案例庫維護中的應用.計算機應用,2009,29(6):1598—1604 [28]倪志偉,吳姍,胡湯磊.聯系發現在證券客戶劃分中的應用研究.計算機工程與應用, 2009, 45(18):201--204 [29]Dan Han, Zhiwei Ni, Gongrang Zhang, Hongyu Wang, Jun Yan. Research and Design the Extension Case BaseBased on CBR. BIFE International meeting, 2009,:210—214 (EI收錄) [30]鄭盈盈,倪志偉,吳姍,王麗紅.基於移動網格和密度的數據流聚類演算法.計算機工程與應用,2009,45(8):129--131 [31]王園園,倪志偉,趙裕嘯,伍章俊.基於決策樹的模糊聚類評價演算法及其應用.計算機技術與發展, 2009,19(9):232-235 [32]嚴軍,倪志偉,王宏宇,韓丹.案例推理在汽車診斷中的應用.計算機應用研究. 2009,26(10):3846-3848 [33]劉慧婷,倪志偉.基於EMD與交叉覆蓋演算法的個人信用的評估.計算機工程與設計,2009,10:4472—4491 [34]劉慧婷,倪志偉.基於EMD與K-means演算法的時間序列聚類.模式識別與人工智慧,2009.10 :803—808 [35]倪志偉,李建洋,李鋒剛, 楊善林.案例決策技術及案例決策支持系統研究綜述.計算機科學,2009,36(11):18—23 [36]郭峻峰, 倪志偉, 高雅卓, 伍章俊.一種提高數據倉庫查詢效率的有效方法.計算機集成製造系統, 2009,15(12):2451-2457 (EI收錄) [37]高雅卓,倪志偉,郭峻峰,胡湯磊.用戶興趣驅動的冰山數據立方體構建及更新方法研究.計算機科學, 2009,36(12):179-182 [38]趙裕嘯,倪志偉,王園園,伍章俊.SQL Server 2005數據挖掘技術在證券客戶忠誠度的應用.計算機技術與發展, 2010,20(2):229-232 [39]李鋒剛,倪志偉, 郜巒.案例推理和多策略相似性檢索的中醫處方自動生成.計算機應用研究,2010, 27(2):544—547 [40]李建洋,倪志偉,鄭金彬,謝秀珍.案例知識維護技術的研究進展.武漢工程大學學報,2010,32(3):96-99 [41]趙敏,倪志偉,劉斌.K-means與樸素貝葉斯在商務智能中的應用.計算機技術與發展, 2010,20(4):179-182 [42]王宏宇,倪志偉,嚴軍,韓丹.灰度關聯理論在CBR中的應用研究.計算機技術與發展, 2010,20(5):96-100 [43]羅義欽,倪志偉,楊葛鍾嘯.一種新的數據流分形聚類演算法.計算機工程與應用, 2010,46 (6): 136-13 [44]查春生,倪志偉,倪麗萍,公維峰.基於相空間重構的股指時間序列相關性分析,計算機技術與發展,計劃在2010年第8期刊載 [45]姜苗,倪志偉,王超,戴奇波.在線挖掘數據流混合窗口中閉頻繁項集,系統模擬學報, [46]辜麗川,倪志偉,張友華.一種基於核矩陣迭代學習的範例相似度演算法,模式識別與人工智慧。 [47] Case base maintenance based on outlier data mining,Proc. 4th Intl. Conf. on Machine Learning and Cybernetics,IEEE Press, China, 2005.8 ,2861-2864 [48] 基於相似粗糙集的案例特徵項的約簡維護, 計算機科學,Vol.32,No.8.A , 2005,93-96 [49] 數據流管理與挖掘研究, 合肥工業大學學報(自然科學版), Vol.28, No.9 , 2005,1157-1162 [50] Case-Based Reasoning Framework Based On Data Mining Technique. Proceedings of the Third International Conference on Machine Learning and Cybernetics, Shanghai, August,2004,2511-2514 [51] 基於案例和規則相結合的推理技術,小型微型計算機系統,2004,Vol.25,No.7,1155-1158 [52] 集成範例推理系統的研究,系統模擬學報,2004,Vol.16,No.4, 803-806 [53] 範例推理中範例自動獲取的數據挖掘技術,天津大學學報,2003年,Vol.36,No.1,82-86 [54] 基於知識發現的範例推理系統,計算機科學,Vol.30,No.5,2003年,26-29 [55] 範例推理系統中的範例庫維護,小型微型計算機系統,Vol.24, No.10,2003年10月,1825-1828 [56] Integrated case-based reasoning,Proceedings of 2003 International Conference on Machine Learning and Cybernetics ,Xi』an,2003,1845-1849 [57]範例推理中的知識發現技術,小型微型計算機系統,Vol.23,No.2,2002年2月,159-162 [58]範例庫中特徵項權重的發現技術,廈門大學學報, Vol.41,No.2,2002年3月,168-172 [59]用神經網路來實現基於範例的推理系統,計算機工程,2002年7月,Vol.28,No.7 [60]A neural network case-based reasoning and its application , Proceedings of 2002 International Conference on Machine Learning and Cybernetics ,Beijing, 2002.11,529-532 [61]範例庫上的知識發現,南開大學學報,2002年12月,Vol.35,No.4 [62]神經網路專家系統及其數據挖掘技術的探討,系統工程學報,2001年,Vol.16, No.1, 61-65

⑵ 給定文法G[E]:E->T+E| T,T->num,給出句子2+ 3- 4的最左...

編譯原理呀,好理論.這種題目解題其實先構建語法樹,然後根據語法樹來寫最左最右推導比較方便.不過題目好像不對,沒有定義減號(-),所以文法分析應該失敗的.如果句子為
2+3+4的話,那麼:語法樹應為:ET
+
E2
T
+
E3
T4最左推導為:E->T+E->2+E->2+T+E->2+3+E->2+3+T->2+3+4最右推導為:E->T+E->T+T+E->T+T+T->T+T+4->T+3+4->2+3+4

⑶ 大學軟體工程專業教材都有哪些

ST軟體工程免費下載

鏈接:https://pan..com/s/1zesJfTuWTpPplC7Yf4YusQ

提取碼:7y95

ST是指境內上市公司被進行特別處理的股票,也是退市風險警示。ST股是指境內上市公司經營連續兩年虧損,被進行退市風險警示的股票。

⑷ 編譯原理的題目:對於文法G(E):E→T|E+T|E-T T→F|T*F|T/F F→(E)|i

終極符集合Vt={+,-,*,/,(,),i}
非終極符集合Vi={E,T,F}
最右推導:E => E-T => E-F => E-(E) => E-(T) => E-(T+F) => E-(T+i) => E-(T*F+i)
直接短語:T*F,i

⑸ 編譯原理左遞歸消除

這些題很難啊!!!
都有間接左遞歸。要先變成直接左遞歸,然後消除掉。
--------------------
G3.1
S->SA|Ab|b|c
A->Bc|a
B->Sb|b
--------------------
間接左遞歸轉直接左遞歸
B代入A:A ->(Sb|b)c|a -> Sbc|bc|a
A代入S:S -> S(Sbc|bc|a)|(Sbc|bc|a)b|b|c -> SSbc|Sbc|Sa|Sbcb|bcb|ab|b|c
消除直接左遞歸
S->bcbS'|abS'|bS'|cS'
S'->SbcS'|bcS'|aS'|bcbS'|ε
S'還是有直接左遞歸,繼續消除
S'->bcS'T|aS'T|bcbS'T
T->bcS'T|ε
最後,這題答案就是S,S',T的產生式

--------------------
下面兩題更難了,上一題反復代入還能把其他非終結符消掉,下面兩個文法都是最後代入還剩下兩個非終結符反復迭代,佛了!
G3.2
E->ET+|T

T->TF*|F

F->E|i
--------------------
F代入T: T->T(E|i)*|(E|i)->TE*|Ti*|E|i
T代入E:

--------------------
G3.3
S->V_1

V_1->V_2|V_1 2 V_2

V_2->V_3|V_2 + V_3
V_3->V_1 * |(
這些字母我都不認識了,換一下
S->A|SiA
A->B|A+B
B->S*|(
--------------------
B代入A:A->(S*|()|A+(S*|()->S*|(|A+S*|A+(
A代入S:

--------------------

⑹ 編譯原理中無符號整數/無符號偶數的文法是什麼

無符號整數: 開頭不能為 0 的任意長度的數字串

S->TE//S表示以[1-9]開頭的任意長度的字元串,也就是無符號整數啦。
E->ED|ε//E表示任意長度數字串或空串
D->T|0//D表示[0-9]的終結符
T->1|...|9//T表示[1-9]的終結符


無符號偶數: 以0, 2, 4, 6, 8 結尾的任意長度的數字串。

S->ET//S表示以02468結尾的任意長度的數字串。
E->Ed|ε//E表示任意長度的數字串或空串。
D->0|1|2|...|9//D表示[0-9]中任意一個數字。
T->0|2|4|6|8//T表示偶數單個數字。

⑺ 編譯原理問題,高手進。

回答下列問題:(30分)
(6分)對於下面程序段
program test (input, output)
var i, j: integer;
procere CAL(x, y: integer);
begin
y:=y*y; x:=x-y; y:=y-x
end;
begin
i:=2; j:=3; CAL(i, j)
writeln(j)
end.
若參數傳遞的方法分別為(1)傳值、(2)傳地址,(3)傳名,請寫出程序執行的輸出結果。
答: (1) 3 (2) 16 (3) 16 (每個值2分)

(6分)計算文法G(M)的每個非終結符的FIRST和FOLLOW集合,並判斷該文法是否是LL(1)的,請說明理由。
G(M):
M → TB
T → Ba |
B → Db | eT |
D → d |

解答:
計算文法的FIRST和FOLLOW集合:(4分)
FIRST(M) = { a,b,e,d, } FIRST(T) = { a,b,e,d, }
FIRST(B) = {b,e,d, } FIRST(D) = {d,}
FOLLOW (M) = {#} FOLLOW (T) = { a,b,e,d,#}
FOLLOW (B) = {a,# } FOLLOW (D) = { b}

檢查文法的所有產生式,我們可以得到:
1. 該文法不含左遞歸,
2. 該文法中每一個非終結符M,T,B,D的各個產生式的候選首符集兩兩不相交。
3. 該文法的非終結符T、B和D,它們都有候選式,而且
FIRST(T)∩FOLLOW(T)={ a,b,e,d }≠
所以該文法不是LL(1)文法。(2分)

(4分)考慮下面的屬性文法
產 生 式 語 義 規 則
S→ABC

A→a
B→b
C→c B.u := S.u
A.u := B.v + C.v
S.v := A.v
A.v :=3*A.u
B.v := B.u
C.v := 1
畫出字元串abc的語法樹;
對於該語法樹,假設S.u的初始值為5,屬性計算完成後,S.v的值為多少。
答:(1) (2分)

(2) S.v的值為18 (2分)

(4分)運行時的DISPLAY表的內容是什麼?它的作用是什麼?
答:DISPLAY表是嵌套層次顯示表。每當進入一個過程後,在建立它的活動記錄區的同時建立一張嵌套層次顯示表diaplay.假定現在進入的過程層次為i,則它的diaplay表含有i+1個單元,自頂向下每個單元依次存放著現行層、直接外層、…、直至最外層(主程序,0層)等每層過程的最新活動記錄的起始地址。通過DISPLAY表可以訪問其外層過程的變數。

(5分)對下列四元式序列生成目標代碼:
A:=B*C
D:=E+A
G:=B+C
H:=G*D
其中,H在基本塊出口之後是活躍變數, R0和R1是可用寄存器。
答: 目標代碼序列
LD R0 B
MUL R0 C
LD R1 E
ADD R1 R0
LD R0 B
ADD R0 C
MUL R0 R1
ST R0 H

(5分)寫出表達式a+b*(c-d)對應的逆波蘭式、三元式序列和抽象語法樹。
答:
逆波蘭式:(abcd-*+) (1分)
三元式序列: (2分)
OP ARG1 ARG2
(1) - c d
(2) * b (1)
(3) + a (2)
抽象語法樹:(2分)

(8分)構造一個DFA,它接受={a,b}上所有包含ab的字元串。
答:
(2分)構造相應的正規式:(a|b)*ab(a|b)*

(3分)
a a

a b
b b

(3分)確定化:
I
{0,1,2} {1,2,3} {1,2}
{1,2,3} {1,2,3} {1,2,4,5,6}
{1,2} {1,2,3} {1,2}
{1,2,4,5,6} {1,2,3,5,6} {1,2,5,6}
{1,2,3,5,6} {1,2,3,5,6} {1,2,4,5,6}
{1,2,5,6} {1,2,3,5,6} {1,2,5,6}
b b
b a
a a a a

a b b
b

最小化:
{0,1,2} {3,4,5}
{0, 2},1, {3,4,5}

(6分)寫一個文法使其語言為L(G)={anbncm| m,n≥1,n為奇數,m為偶數}。
答:
文法G(S):

(8分)對於文法G(S):

1. 寫出句型b(Ma)b的最右推導並畫出語法樹。
2. 寫出上述句型的短語,直接短語和句柄。
答:
1. (4分)

2. (4分)
短語: Ma), (Ma), b(Ma)b
直接短語: Ma)
句柄: Ma)

(12分)對文法G(S):
S → a | ^ | (T)
T → T,S | S
(1) 構造各非終結符的FIRSTVT和LASTVT集合;
(2) 構造算符優先表;
(3) 是算符優先文法嗎?
(4) 構造優先函數。
答:
(1) (4分)

(2) (4分)
a ^ ( ) ,
a > >
^ > >
( < < < = <
) > >
, < < < > >

(3) 是算符優先文法,因為任何兩個終結符之間至多隻有一種優先關系。 (1分)

(4) 優先函數(3分)
a ^ ( ) ,
F 4 4 2 4 4
G 5 5 5 2 3

(8分)設某語言的do-while語句的語法形式為
S do S(1) While E
其語義解釋為:

針對自下而上的語法分析器,按如下要求構造該語句的翻譯模式,將該語句翻譯成四元式:
(1) 寫出適合語法制導翻譯的產生式;
(2) 寫出每個產生式對應的語義動作。
答:(1). 適合語法制導翻譯的文法(4分)
G(S):
R do
UR S(1) While
SU E
(2). (4分)
R do
{ R.QUAD:=NXQ }

UR S(1) While
{ U.QUAD:=R.QUAD;
BACKPATCH(S.CHAIN, NXQ) }

SU E
{ BACKPATCH(E.TC, U.QUAD);
S.CHAIN:=E.FC }

答案二:
(1) S do M1 S(1) While M2 E
M ε (4分)
(2) M ε { M.QUAD := NXQ } (4分)
S do M1 S(1) While M2 E
{
BACKPATCH(S(1).CHAIN, M2.QUAD);
BACKPATCH(E.TC, M1.QUAD);
S.CHAIN:=E. FC
}

(10分)將語句
while C>0 do if A B=0 then C:=C+D else C:=C*D
翻譯成四元式。
答:
100 (j>, C, 0, 102)
101 (j, -, -, 112)
102 (jnz, A, -, 106)
103 (j, -, -, 104)
104 (j=, B, 0, 106)
105 (j, -, -, 109)
106 (+, C, D, T1)
107 (:=, T1, -, C)
108 (j, -, -, 100)
109 (*, C, D, T2)
110 (:=, T2, -, C)
111 (j, -, -, 100)
112

(10分)設有基本塊如下:
T1:=3
T2:=A*B
T3:=9+T1
M:=A*B
T4:=C-D
L:=T3*T4
T2:=C+D
N:=T2
畫出DAG圖;
設L,M,N 是出基本塊後的活躍變數,請給出優化後的四元式序列。
答:

1. (6分)
L

*
T2,M T4 T2,N

* - +

T1 T3
3 A B 12 C D

2. (4分)
M:=A*B
S1:=C-D
L:=12*S1
N:=C+D

(8分)文法G(S)及其LR分析表如下,請給出串baba#的分析過程。
(1) S → DbB (2) D → d (3) D → ε
(4) B → a (5) B → Bba (6) B → ε
LR分析表
ACTION GOTO
b D a # S B D
0 r3 s3 1 2
1 acc
2 s4
3 r2
4 r6 S5 r6 6
5 r4 r4
6 s7 r1
7 S8
8 r5 r5
解答:
步驟 狀態 符號 輸入串
0 0 # baba#
1 02 #D baba#
2 024 #Db aba#
3 0245 #Dba ba#
4 0246 #DbB ba#
5 02467 #DbBb a#
6 024678 #DbBba #
7 0246 #DbB #
8 01 #S # acc
哈哈,估計認識!!

⑻ 編譯原理題目

明天寫了給你吧。這實在略多了點

⑼ 編譯原理文法分析

改完了,能文法分析出來了!!
大概 跟你說下 你的錯誤吧:
出錯地點:
1.聲明的stack[50]沒有初始化;
2.stack的入棧是錯誤的,按照你的方式,如果原來有TM,再加入T->FN,則M就被擠出來了.(這里很關鍵,你對照我給你改的再看看)
3.s指針在你入棧操作以後並沒有指向棧頂,而是保持了不變,這肯定是有問題的.(傳入push函數的時候直接傳參數s就好了.)
4.if(*s==*p){***}else{}的else的右括弧管轄的范圍 有錯誤

不嫌棄的話,可以去http://blog.csdn.net/fangguanya,我的BLOG,不怎麼充實,呵呵,有這個程序的運行結果的. 謝謝 呵呵.
總之你對照我給你改的再看看吧. 我把我的測試輸出 也給保留了.你好對照點.
(PS.我用的vs2005,用的時候你改下頭申明,其他一樣)

// grammar.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;

char * spush(char *stack,char *pt);
bool analyse(char *p);

void main()
{
//將分析串存放在二維數組中
char input[5][10]={"i+i#",
"i*(i+i)#",
"i*i+i#",
"i+*#",
"+i*i#"};
bool flag; //定義一個布爾型的標記量
for(int h=0;h<5;++h)
{
flag=analyse(input[h]);
if(flag) cout<<"恭喜你!"<<input[h]<<"語法分析成功,合法!"<<endl;
else cout<<"對不起!"<<input[h]<<"語法分析失敗,非法!"<<endl;
}
int aaa;
cin>>aaa;
}
//定義各一將串逆序入棧的函數
char * spush(char *stack,char *pt)
{
int l=0;
//while循環的作用是將指針指向字元串的末尾,然後再由後向前入棧,從而實現逆序
while(*pt!='\0')
{
pt++;
l++;
}

if (*stack == '#')
{
stack++;
}
while(l)
{
pt--;
char cTempIntoStack = (*pt);
*stack=cTempIntoStack;
stack++;
l--;
}
stack--; //由於前面向前加了一位,要返回
////////////////
return stack;
///////////////////////////////////

}

/*LL(1)分析表
i + * ( ) #
E TM +TM
F i (E)
M TM e e
N e *FN e e
T FN FN
*/

//分析函數
bool analyse(char *p){
char analyseTable[5][6][4]={
"TM", "", "", "TM", "", "",
"i", "", "", "(E)", "", "",
"", "+TM", "", "", "e", "e",
"", "e", "*FN", "", "e", "e",
"FN", "", "", "TN", "", ""
};
char *stack = new char[50]; //定義一個棧空間
for (int iStack = 0;iStack<50 ;iStack++)
{
stack[iStack] = 0;
}
char *s=stack; //用指針*s指向棧的起始地址
*s='#'; //將「#」入棧
s++; //指針加1
*s='E'; //將「E」入棧
//下面的while循環實現字元串的詞法分析操作

int count = 0;

while(*s!='#' || *p!='#'){
count++;
char * temp = s;
cout<<"NO."<<count<<endl;
cout<<"STACK"<<endl;
while (*temp != '#')
{
cout<<*temp<<" ";
temp--;
}
cout<<endl;

int x,y;
//若果棧頂數據和分析串的字元匹配,則將符號棧的棧頂數據出棧(即將棧頂指針減1)
if(*s==*p){
cout<<"Before :"<<*s<<endl;
s--;
p++;
cout<<"After :"<<*s<<endl;
}
//當符號棧和分析串的字元不匹配時,查分析表
else {
switch(*s){
case 'E':x=0;break;
case 'F':x=1;break;
case 'M':x=2;break;
case 'N':x=3;break;
case 'T':x=4;break;
default:return false;
}
switch(*p){
case 'i':y=0;break;
case '+':y=1;break;
case '*':y=2;break;
case '(':y=3;break;
case ')':y=4;break;
case '#':y=5;break;
default:return false;
}
//若果對應的為空,則分析串非法,退出
if(analyseTable[x][y][0]=='\0') return false;
//若查表所對應的為'e',則將符號棧的棧頂數據出棧
else if(analyseTable[x][y][0]=='e') s--;
//其它,這時將查表所得的項逆序入符號棧
else {
s=spush(s,analyseTable[x][y]);
}
}
}
return true; //分析成功,返回
}

閱讀全文

與編譯原理ET相關的資料

熱點內容
南昌哪些地方需要程序員 瀏覽:756
三台伺服器配置IP地址 瀏覽:173
如何用命令方塊連續對話 瀏覽:275
win7linux共享文件夾 瀏覽:302
命令符打開本地服務 瀏覽:599
android應用程序源碼 瀏覽:700
安卓開發工程師簡歷怎麼寫 瀏覽:59
熱水器水量伺服器是什麼意思 瀏覽:115
stk衛星編譯 瀏覽:480
對後台程序員的要求 瀏覽:761
ios大文件夾圖標 瀏覽:624
生的計劃pdf 瀏覽:713
oppoa93加密便簽在哪查找 瀏覽:21
兩個數字的加減乘除運算編程 瀏覽:227
給手機加密碼忘記了怎麼辦 瀏覽:601
單片機運算符 瀏覽:297
移動端微信商城源碼 瀏覽:444
編程貓下一個背景在哪裡 瀏覽:359
javaclasstype 瀏覽:240
樂高編程和樂高課的延伸 瀏覽:357