急求高人編寫簡單的詞法分析程式,急求高人編寫一個簡單的詞法分析程式

時間 2021-10-30 04:44:46

1樓:匿名使用者

嘿嘿,這個我做過哦。是編譯原理的東西。

不過現在沒有程式,沒帶來,給你一個參考的:雖然不是完全符合你的要求。不過其中很多函式你是要用到的,比如詞法分析部分,其實你的要求就是進行詞法分析的,無非你用scanf(),你用詞法分析,分析出scanf()語句,再進行內部引數分析,就ok了;

祝你成功哦

for迴圈語句翻譯 遞迴下降法 輸出三地址碼 /////////////

#define max 100

#include

#include

#include

char str[max];

char ch;

int turn;

char strtoken[max];

int kind;

int n=0;//存放strtoken元素的個數

struct word//結構體 存放單詞

; //record[x]=new word;

word *record[12];//放所有識別出來的單詞,分別存放他們的編號以及字串,x是其下標

////////////////////詞法分析///////////////////////

int buffer()//載入

break;

} return(i);

} bool isletter(char ch)///////////判斷是否是字母

bool isdigit(char ch)//////////判斷是否是數字

char getchar(int i)///////讀取字元

char getbc(char ch)////判斷是不是空格或者換行,如果是,直接讀取下一個字元直道不再空白為止

else

return(ch);

} void concat()/////////////連線,即為strtoken賦值

int reserve()/////以單詞為單位查詢保留字,是則返回編碼,不是則返回0,用來區分標誌符和保留字

void clear()

/////////////*語法遞迴分析*/////////////////

int a(int * c,int & q)

else

cout<<","

clear();

x++;

} else if(isdigit(ch))

ch=null;

turn=turn-1;

kind=7;

//////////////

record[x]=new word;

record[x]->sort=kind;

////////////////

cout<<"(";

for(int i=0;iword[i]=strtoken[i];

cout

} cout<<","

clear();x++;

} else if(ch=='=')

cout

} /////////語法分析///////

int j=0;

///////////////////制導翻譯//////////////////

if(!s(ana,j)) cout<<"語法出錯!"

cout

i=0;

while(record[3]->word[i]!='\0')

cout

cout

i=0;

while(record[1]->word[i]!='\0')

cout

i=0;

while(record[5]->word[i]!='\0')

cout

cout

i=0;

while(record[7]->word[i]!='\0')

cout

cout<<" goto 105"

cout

i=0;

while(record[11]->word[i]!='\0')

cout

cout<<"106 goto 102"<

cout<<"107 end"<

2樓:匿名使用者

主函式我在用訊息發給你,不過訊息能發的內容太少了。我就多分幾次發

* 程式名:詞法分析器 *

* 功能:從program.txt讀入一段完整c++**,根據原有的關鍵字表(keyword)、 *

* 算符表(operator)、界符表(seperator)以及新建的識別符號表對每個詞 *

* 進行分類,找出每個詞的詞性及在對應表中的位置。對關鍵字,只輸出一次 *

* (即後面再出現相同的關鍵字時,不在重新輸出)。識別符號表為identifier.txt, *

* 對於數字常量,直接輸出,並標記為constant。每個詞的詞性、位置均輸出在 *

* result.txt裡。 識別符號先存放在陣列內,等對所有詞進行判斷之後才輸出到檔案中 *

* 這樣的話,可以比較判斷是否有相同的識別符號。 *

* * *

* 大體思路:用get()函式從檔案中一次讀入一個字元,對該字元進行判斷。分情 *

* 況討論,對大部分的情況,都必須預先讀取下一位來對該位進行判斷才可以。個 *

* 別情況甚至得預先讀取兩位來判斷。 *

#include

#include

#include

#include

using namespace std;

//關鍵字表

string keyword[63]=; //關鍵字表

int used[42]; //判斷關鍵字是否已經使用過

//算符表

string operator[23]=;

//界符表

string seperator[17]=",

"#", "\"", ":", "\'", ">>", "<<","::"};

int iskeyword(char *a) //是否為關鍵字,是的話返回關鍵字的下標加1。不是的話返回0

int isoperator(char *a) //是否為操作符,是的話返回關鍵字的下標加1。不是的話返回0

int isseperator(char *a) //是否為分隔符,是的話返回關鍵字的下標加1。不是的話返回0

3樓:匿名使用者

哥們,哪學校的

我們剛交完作業,或許可以幫你,哈哈

誰能給一個用j**a編寫的簡單的詞法分析器,語法分析器.能對c語

4樓:九尾

這個網上沒有這個東西,語法分析器都是用自己本身的語言寫的,而且又不是開源的。。。

要麼花錢找人寫一個,要麼自己寫,,,

用vb編寫簡單的直板手機程式,急求答案,謝謝

程式 該程式的主要目的是要判斷輸入的使用者名稱是否合法,所以我們首先編寫判斷使用者名稱的程式 雙擊 確定 按鈕,新增如下的程式 黑體部分為系統自動生成的 楷體為註釋 private sub command1 click 判斷是否輸入了使用者名稱 if text1.text then 如果text1為...

編寫程式,求1 6的前n項和,編寫程式,求1 2 1 4 1 6 的前n項和

這道題簡單 因為正常的判題系統1秒可以跑10的7次方 所以,分兩種情況 1 當 n 10 6時,暴力求解,即 double sum 0 for int i 2 i n i 2 2 當n 10 6時,用尤拉公式,即 利用 尤拉公式 可以查閱相關書籍 1 1 2 1 3 1 n ln n c,c為尤拉常...

急求幫助,matlab編寫程式起泡法對數由小到大排序

隱匿望默唸 步驟如下 clcclear all s 9 8 4 2 7 10 6 1 5 3 要排序的數列ls length s for i 1 ls 1 for j 1 ls i if s j s j 1 t s j s j s j 1 s j 1 t endend ends 輸出排序後結果 拓展...