① 編譯原理 遞歸下降分析器
自頂向下分析法(遞歸下降分析程序構造)
E-->T/E+T
T-->F/T*F
F-->i/(E)
步驟 棧 輸入字元串 狀態
0 #E i1*(i2+i3)# 初始化
1 #T i1*(i2+i3)# E-->T
2 #T*F i1*(i2+i3)# T-->T*F
3 #T*i i1*(i2+i3)# F-->i
4 #F* *(i2+i3)# 匹配
5 #F (i2+i3)# 匹配
6 #(E) (i2+i3)# E-->(E)
7 #(E i2+i3)# 匹配
8 #(E+T i2+i3)# E-->E+T
9 #(E+F i2+i3)# T-->F
10 #(E+i i2+i3)# F-->i
11 #(E+ +i3)# 匹配
12 #(E i3)# 匹配
13 #(T i3)# E-->T
14 #(F i3)# T-->F
15 #(i i3)# F-->i
16 #( )# 匹配
17 # # 接受
所以可以寫出
PROCEDURE E
BEGIN
T;
WHILE SYM='+' THEN ADVANCE;T END
END;
PROCEDURE T
BEGIN
F;
WHILE SYM='*' THEN ADVANCE;F END
END;
PROCEDURE F
BEGIN
IF SYM='i' THEN ADVANCE END
ELSE
IF SYM='(' THEN
BEGIN ADVANCE;E;
IF SYM=')' THEN ADVANCE;
ELSE ERROR;END
END;
② 提問 編譯原理問題(高分)
詞法分析 的作用是把輸入的源語句轉化成單詞形式
第五個最右推導沒給要推出的句子 如果是 cbb 那過程也不對
E->CB
C->c
B->b
最右推導的分析為
1 CB
2 Cb
3 cb
你給的文法有問題吧,最右推導通俗的說 就是只按照最右邊的非終結符推導
你這些都是要干什麼的題,如果要考試,後面那幾道的類型幾乎必考!!!
③ 編譯原理中詞法分析器
或許……可以通過這個符號的前面的第一個有實際意義的「單詞」的屬性來判斷,因為如果它是加減號,
那麼它「前面」的那個單詞必然具有可以被它加或減的屬性,否則就是正負號。
如果前一個單詞屬性是標示符或者某種數據類型(比如整型、字元串型),
那麼這個符號就是加減號而不是正負號,如果前面一個單詞
是關鍵字或運算符這類不可能承受「加減」操作的這種,這個號就是正負號。
個人覺得這個問題應該沒有一針見血或者一勞永逸的辦法,就得一點一點分析吧。
PPPS:還有一策就是甭搭理它,交給語義分析辦。
④ 編譯原理課程-簡單詞法分析器設計(C或C++)
分類: 電腦/網路 >> 程序碰陵設計 >> 其他編程語言
問題描述:
完成以下正則文法所描述的Pascal語言子集單詞符號的詞法分析程序。
<標識符>→字母| <標識符>字母| <標識符>數字
<無符號整數>→數字| <無符號整數>數字
<單字元分界符> →+ |- |* |; |(|)
<雙字元分界符>→<大於>=|<小於>=|<小於>>|<冒號>=|<斜豎>*
<小於>→<
<等於>→=
<大於>→>
<冒號> →:
<斜豎> →/
該語言的保留字 :begin end if then else for do while and or not
說明:
1 該語言大小寫不敏感。
2 字母為a-z A-Z,數字為0-9。
3可以對上述文法進行擴充和笑坦戚改造。
4 『/*……*/』為程序的注釋部分。
[設計要求]
1、 給出各單詞符號的類別編碼。
2、 詞法分析程序應能發現輸入串中的錯誤。
3、 詞法分析作為單獨一遍編寫,詞法分析結果為二元式序列組成的中間文件。
4、設計兩個測試用例(信宴盡可能完備),並給出測試結果。
解析:
這種問題 …… 會有人解答嗎?
⑤ 編譯原理筆記7:語法分析(1)語法分析器的任務、語法錯誤的處理
語法分析器的兩項主要任務,分別:
源程序中的錯誤可以分為詞法/語法錯誤、語義錯誤兩類。前者主要形式是命名不合虛悄雹法、關鍵字書寫錯誤、語法結構有問題(比如缺分號、該配對的東西不配對)等;後者則可分為靜態/動態兩種,靜態例如類型使用錯誤、參數使用錯誤等,動態語義錯誤則是無窮遞歸這類邏輯性的問題。
例如:
緊急恢復:x = a+b+d; // 丟運芹棄掉 b 後的記號,直到遇到 +
短語級恢復: x = a+b; // 加入分號
在寫程序時,要養成減少錯誤的好習慣:每次用變數、參數時,要在使用之前進行初始化,並在差帆直接使用之前檢查一下是否出現值為空等問題,防止出現不可預知的錯誤
⑥ 編譯原理課程設計-詞法分析器設計(C語言)
#include"stdio.h"/*定義I/O庫所用的某些宏和變數*/
#include"string.h"/*定義字元串庫函數*/
#include"conio.h"/*提供有關屏幕窗口操作函數*/
#include"ctype.h"/*分類函數*/
charprog[80]={'