導航:首頁 > 源碼編譯 > 編譯原理詞法解釋器

編譯原理詞法解釋器

發布時間:2022-05-24 22:17:57

編譯原理中的詞法分析器的輸入與輸出是什麼

編譯原理中的詞法分析器的輸入是源程序,輸出是識別的記號流。

詞法分析器編制一個讀單詞的程序,從輸入的源程序中,識別出各個具有獨立意義的單詞,即基本保留字、標識符、常數、運算符和分隔符五大類。並依次輸出各個單詞的內部編碼及單詞符號自身值。(遇到錯誤時可顯示「Error」,然後跳過錯誤部分繼續顯示)。

(1)編譯原理詞法解釋器擴展閱讀

詞法分析器的作用:

1、與符號表進行交互,存儲和讀取符號表中的標識符的信息。

2、讀入源程序的輸入字元,將他們組成詞素,生成並輸出一個詞法單元序列,每個詞法單元序列對應一個於一個詞素。

3、過濾掉程序中的注釋和空白。

4、將編譯器生成的錯誤消息與源程序的位置聯系起。


⑵ 編譯器有哪幾部分構成.編譯原理

1. 詞法分析

詞法分析器根據詞法規則識別出源程序
中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器
的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。

2. 語法分析

語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。

3. 語義分析

語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。

4. 中間代碼生成

中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。

⑶ 編譯原理課程設計-詞法分析器設計(C語言)

#include"stdio.h"/*定義I/O庫所用的某些宏和變數*/

#include"string.h"/*定義字元串庫函數*/

#include"conio.h"/*提供有關屏幕窗口操作函數*/

#include"ctype.h"/*分類函數*/

charprog[80]={''},

token[8];/*存放構成單詞符號的字元串*/

charch;

intsyn,/*存放單詞字元的種別碼*/

n,

sum,/*存放整數型單詞*/

m,p;/*p是緩沖區prog的指針,m是token的指針*/

char*rwtab[6]={"begin","if","then","while","do","end"};

voidscaner(){

m=0;

sum=0;

for(n=0;n<8;n++)

token[n]='';

ch=prog[p++];

while(ch=='')

ch=prog[p++];

if(isalpha(ch))/*ch為字母字元*/{

while(isalpha(ch)||isdigit(ch))/*ch為字母字元或者數字字元*/{

token[m++]=ch;

ch=prog[p++];}

token[m++]='';

ch=prog[p--];

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)/*字元串的比較*/{

syn=n+1;

break;}}

else

if(isdigit(ch))/*ch是數字字元*/{

while(isdigit(ch))/*ch是數字字元*/{

sum=sum*10+ch-'0';

ch=prog[p++];}

ch=prog[p--];

syn=11;}

else

switch(ch){

case'<':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='>'){

syn=21;

token[m++]=ch;}

elseif(ch=='='){

syn=22;

token[m++]=ch;}

else{

syn=20;

ch=prog[p--];}

break;

case'>':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=24;

token[m++]=ch;}

else{

syn=23;

ch=prog[p--];}

break;

case':':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=18;

token[m++]=ch;}

else{

syn=17;

ch=prog[p--];}

break;

case'+':syn=13;token[0]=ch;break;

case'-':syn=14;token[0]=ch;break;

case'*':syn=15;token[0]=ch;break;

case'/':syn=16;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

default:syn=-1;}}

main()

{

printf(" Thesignificanceofthefigures: "

"1.figures1to6saidKeyword "

"2. "

"3.figures13to28saidOperators ");

p=0;

printf(" pleaseinputstring: ");

do{

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

do{

scaner();

switch(syn){

case11:printf("(%d,%d) ",syn,sum);break;

case-1:printf(" ERROR; ");break;

default:printf("(%d,%s) ",syn,token);

}

}while(syn!=0);

getch();

}

程序測試結果

對源程序beginx:=9:ifx>9thenx:=2*x+1/3;end#的源文件,經過詞法分析後輸出如下圖5-1所示:

具體的你在修改修改吧

⑷ 編譯原理詞法分析器是干什麼用的,怎麼用

1、識別出源程序中的各個單詞符號,並轉換成內部編碼形式 2、刪除無用的空白字元回車字元以及其他非實質性字元 3、刪除注釋 4、進行詞法檢查,報告所發現的錯誤。

⑸ 編譯原理課設實現C/C++語言詞法分析器

詞法分析很簡單的,就是把輸入文件的字元串組合成為一個個單詞就可以了。
比如 void main(){} ,本來都是一個個字元,你要做的是:把它轉換為 "void" , "main" , "(" , ")" , "{" , "}"等,相當於是單詞了,原來的只是單個字元。。。
當然真正的詞法分析還需要有一定的語義分析和糾錯功能,但是估計你暫時是用不到的。。。

⑹ 編譯原理中詞法分析器

或許……可以通過這個符號的前面的第一個有實際意義的「單詞」的屬性來判斷,因為如果它是加減號,
那麼它「前面」的那個單詞必然具有可以被它加或減的屬性,否則就是正負號。
如果前一個單詞屬性是標示符或者某種數據類型(比如整型、字元串型),
那麼這個符號就是加減號而不是正負號,如果前面一個單詞
是關鍵字或運算符這類不可能承受「加減」操作的這種,這個號就是正負號。
個人覺得這個問題應該沒有一針見血或者一勞永逸的辦法,就得一點一點分析吧。
PPPS:還有一策就是甭搭理它,交給語義分析辦。

⑺ 編譯原理的詞法分析器的原理......

將文件讀入內存中
然後從首字元開始分析,匹配規則一般是採用自動機,以語句
int
a
=
12;為例
首先從字元i開始
每次取一個單詞
即從一個非空白字元開始
到下一個空白字元出現為止
為一個單詞

看看
該單詞是不是關鍵字
如看看是不是if
是不是int
都不是的話
則將其當做
字元標記
依此類推

⑻ 編譯原理 詞法分析器中如何得到注釋內容

不同的編譯器的詞法分析器不盡相同,主要看編譯器的設計者是怎麼設計的:
有的是識別出/*和*/後,將其間的字元作為注釋。如VC++,WIN-TC等。
有的是識別出//後,將//之後與換行符前的所有文字當作注釋。如VC++等。

java的注釋和c語言、c++的注釋似乎有點區別,但是也差不多啦!
除了以上兩種之外,還有第三種,文檔注釋:
/** ...... */ 注釋若干行,並寫入javadoc 文檔。
不過我認為這種可以算在第一種之內,當成第一種處理也未嘗不可啊!

⑼ 編譯原理 詞法分析器問題

NFA、DFA以及最簡DFA如下圖所示:

⑽ 編譯原理詞法分析器

這個只要多看看編譯原理書就明白了,這么說吧,詞法分析器就是根據語言的此法規則構造出識別其單詞的有限自動機,它呢是一個數學模型,
先給出識別各類單詞的狀態轉換圖,
將各類單詞的狀態轉換圖的初始狀態合並成一個唯一的初狀態;
然後化簡並調整沖突的狀態編號;
最後再將有限自動機變成一個可行的詞法分析器。

閱讀全文

與編譯原理詞法解釋器相關的資料

熱點內容
釣魚黑坑下什麼app 瀏覽:938
windows軟體編譯為linux程序 瀏覽:270
方舟編譯支持應用 瀏覽:422
華為雲伺服器可以遠程別的電腦嗎 瀏覽:7
單片機百度百科 瀏覽:230
安卓回聲效果發簡訊怎麼弄 瀏覽:166
windows7文件夾屬性沒有位置 瀏覽:949
單片機632什麼意思 瀏覽:119
奢侈品哪個app買最便宜 瀏覽:665
編譯原理意思 瀏覽:329
哪裡下載帶有加密版志願二維碼 瀏覽:393
python讀串口 瀏覽:171
Pdf修改文本 瀏覽:660
電力行業縱向加密技術原理 瀏覽:49
活塞壓縮機基礎 瀏覽:706
么解手機的壓縮包 瀏覽:767
如何開通加密貨幣 瀏覽:148
北京修理伺服器雲主機 瀏覽:204
python程序設計主要思路 瀏覽:897
jar包通過如何在伺服器運行 瀏覽:378