用 C C 編寫乙個 C 語言的詞法分析器程式

2021-10-12 17:35:34 字數 4117 閱讀 8064

#include

#include

#include

#include

using

namespace std;

#define maxn 100

#include

//詞法分析器,對於輸入的串,先處理空格,過濾掉,進入主程式,判斷是字母,迴圈判斷字母或數字

//迴圈出去後,判斷所讀字串是否是保留字,若是輸出保留字及其編碼,若不是,輸出識別符號和編碼

//判斷首字元是數字,則可能是常數,識別首字元後,迴圈判斷是否是數字,出迴圈後指標回退乙個字元

//輸出數字

//需要的函式,getbe()過濾空格,connect用string實現,back()回退乙個指標

string reversed[34]

=;int p;

string prog;

string str;

int i;

void

read_prog

(string& prog)

}void

getbe()

}bool

digit

(char c)

else

}bool

letter

(char c)

else

}int

digitorletter

(char c)if(

digit

(c))

return3;

//其他

}bool

isreversed

(string str)

}return

false;}

int flag;

void

analysis()

p--;//backif(

isreversed

(str)

==false

)break

;case

2:p++

;while

(digit

(prog[p]))

p--; cout<<<

':'<<

' '<<

'<'

<','<<

80<<

'>'

;break

;case3:

switch

(prog[p]

)else

if(prog[p]

=='='

)else

if(prog[p]

=='>'

)else

break

;case

'!':p++;if

(prog[p]

=='='

)else

break

;case

'%':p++;if

(prog[p]

=='='

)elseif(

letter

(prog[p]))

else

break

;case

'&':p++;if

(prog[p]

=='&'

)else

if(prog[p]

=='='

)else

break

;case

'(':

printf

("%d: <(,44>"

,i++);

break

;case

'/':p++;if

(prog[p]

=='*'

) str+

=prog[p]

; cout<<<

':'<<

' '<<

'<'

<','<<

79<<

'>';}

else

if(prog[p]

=='='

)else

if(prog[p]

=='/'

) cout<<<

':'<<

' '<<

'<'

<','<<

79<<

'>';}

else

break

;case

')':

printf

("%d: <),45>"

,i++);

break

;case

'*':p++;if

(prog[p]

=='='

)else

break

;case

',':

printf

("%d: <,,48>"

,i++);

break

;case

'.':

printf

("%d: <.,49>"

,i++);

break

;case

':':

printf

("%d: <:,52>"

,i++);

break

;case

';':

printf

("%d: <;,53>"

,i++);

break

;case

'?':

printf

("%d: <?,54>"

,i++);

break

;case

'[':

printf

("%d: <[,55>"

,i++);

break

;case

']':

printf

("%d: <],56>"

,i++);

break

;case

'^':p++;if

(prog[p]

=='='

)else

break

;case

'else

if(prog[p]

=='='

)else

break

;case

'}':

printf

("%d: <},63>"

,i++);

break

;case

'~':

printf

("%d: <~,64>"

,i++);

break

;case

'+':p++;if

(prog[p]

=='+'

)else

if(prog[p]

=='='

)else

break

;case

'<'

:p++;if

(prog[p]

=='<'

)else

}else

if(prog[p]

=='='

)else

break

;case

'=':p++;if

(prog[p]

=='='

)else

break

;case

'>'

:p++;if

(prog[p]

=='='

)else

if(prog[p]

=='>'

)else

}else

break

;case

'\"'

:printf

("%d: <\",78>"

,i++);

break

;default

:flag=0;

}}}void

analysis()

analysis()

; p++;}

/********* end *********/

}int

main()

編譯原理(用c語言編寫小型詞法分析器)

學過編譯原理的同學一定知道詞法分析,那麼詞法分析如何用c語言實現呢?精力有限,做的詞法分析器只能分析以下幾種 編寫程式前需要狀態表 轉換表 char code 1000 存輸入的字串 char put 100 100 存入得出的結果 char ch 獲得輸入字串的乙個字元 int i 0,j 0,k...

python 實現乙個簡單的C語言詞法分析

python 實現乙個簡單的c語言詞法分析 定義乙個字典或者列表與其中的字串進行輸出來的進行匹配 import sys map key map sym 寫乙個編碼字典 map data 29,22,23,24,25,25,35 36 34 33 32 0 include 56 57 def data...

C語言 編寫乙個日曆

題目 列印乙個月份的日曆。分析 首先列印乙個月份的日曆,要設定乙個基準年,並且要知道這一年的一月一號是週幾 求得當年的一月一號是週幾 在求得當月的第一天是週幾。define crt secure no warnings 1 include include 某個月的日曆 int months 2 13...