編譯原理之詞法分析 語法分析 語義分析

2021-06-08 07:56:16 字數 2365 閱讀 5711

詞法分析(lexical analysis或scanning)和詞法分析程式(lexical analyzer或scanner)

詞法分析階段是編譯過程的第乙個階段。這個階段的任務是從左到右乙個字元乙個字元地讀入源程式,即對構成源程式的字元流進行掃瞄然後根據構詞規則識別單詞(也稱單詞符號或符號)。詞法分析程式實現這個任務。詞法分析程式可以使用lex等工具自動生成。

語法分析(syntax analysis或parsing)和語法分析程式(parser)

語法分析是編譯過程的乙個邏輯階段。語法分析的任務是在詞法分析的基礎上將單詞序列組合成各類語法短語,如「程式」,「語句」,「表示式」等等.語法分析程式判斷源程式在結構上是否正確.源程式的結構由上下文無關文法描述.

語義分析(syntax analysis)

語義分析是編譯過程的乙個邏輯階段. 語義分析的任務是對結構上正確的源程式進行上下文有關性質的審查, 進行型別審查.例如乙個c程式片斷:

int arr[2],b;

b = arr * 10;

源程式的結構是正確的.

語義分析將審查型別並報告錯誤:不能在表示式中使用乙個陣列變數,賦值語句的右端和左端的型別不匹配.

lex

乙個詞法分析程式的自動生成工具。它輸入描述構詞規則的一系列正規式,然後構建有窮自動機和這個有窮自動機的乙個驅動程式,進而生成乙個詞法分析程式.

yacc

乙個語法分析程式的自動生成工具。它接受語言的文法,構造乙個lalr(1)分析程式.因為它採用語法制導翻譯的思想,還可以接受用c語言描述的語義動作,從而構造乙個編譯程式. yacc 是 yet another compiler compiler的縮寫.

源語言(source language)和源程式(source program)

被編譯程式翻譯的程式稱為源程式,書寫該程式的語言稱為源語言.

目標語言(object language or target language)和目標程式(object program or target program)

編譯程式翻譯源程式而得到的結果程式稱為目標程式, 書寫該程式的語言稱為目標語言.

中間語言(中間表示)(intermediate language(representation))

在進行了語法分析和語義分析階段的工作之後,有的編譯程式將源程式變成一種內部表示形式,這種內部表示形式叫做中間語言或中間表示或中間**。所謂「中間**」是一種結構簡單、含義明確的記號系統,這種記號系統複雜性介於源程式語言和機器語言之間,容易將它翻譯成目標**。另外,還可以在中間**一級進行與機器無關的優化。

文法(grammars)

文法是用於描述語言的語法結構的形式規則。文法g定義為四元組(,,,)。其中為非終結符號(或語法實體,或變數)集;為終結符號集;為產生式(也稱規則)的集合;產生式(規則)是形如或 a ::=b 的(a , b)有序對,其中(∪)且至少含有乙個非終結符,而(∪)。,和是非空有窮集。稱作識別符號或開始符號,它是乙個非終結符,至少要在一條規則中作為左部出現。

乙個文法的例子: g=(=,= ,=,=a)

文法分類(a hierarchy of grammars)

著名語言學家noam chomsky定義了四類文法和四種形式語言類,文法的四種型別分別是0型、1型、2型和3型。幾類文法的差別在於對產生式施加不同的限制,分別是:

0型文法(短語結構文法)(phrase structure grammars):

設g=(,,,),如果它的每個產生式是這樣一種結構: (∪)  且至少含有乙個非終結符,而(∪),則g是乙個0型文法。

1型文法(上下文有關文法)(context-sensitive grammars):

設g=(,,,)為一文法,若中的每乙個產生式均滿足|,僅僅  除外,則文法g是1型或上下文有關的。

2型文法(上下文無關文法)(context-free grammars):

設g=(,,,),若p中的每乙個產生式滿足:是一非終結符,(∪)  則此文法稱為2型的或上下文無關的。

3型文法(正規文法)(regular grammars):

設g=(,,,),若中的每乙個產生式的形式都是a→ab或a→a,其中a和b都是非終結,a是終結符,則g是3型文法或正規文法。

0型文法產生的語言稱為0型語言。

1型文法產生的語言稱為1型語言,也稱作上下文有關語言。

2型文法產生的語言稱為2型語言,也稱作上下文無關語言。

3型文法產生的語言稱為3型語言,也稱作正規語言。

語法分析語句篇

語句分為 復合語句 if語句 return 語句 break 語句 continue 語句 for 語句 表示式語句 復合語句 宣告語句 宣告在前,語句在後,宣告可以有多個,語句可以有多個 如int a,b int x 2,y 5 語句就是個復合語句 表示式語句 或 表示式 if語句 if 表示式 ...

編譯原理 簡單計算器 詞法分析 語法分析 含原始碼

參考文件 這個計算器原始碼我上傳到csdn上來,共享出來供有興趣的同學參考 之前大學的時候,編譯原理課程有乙個做計算器的任務,當時沒有做,只顧做乙個漂亮計算器介面。想來當時是買櫝還珠了,有點小遺憾,覺得編譯原理沒有實踐,沒有理解透徹。趁這週末有空,就把編譯器重新做一做,下面是做出來的效果 1.界定實...

自然語言中的詞法分析 語法分析 句法分析

1.詞法分析 詞是自然語言中能夠獨立運用的最小單位,是自然語言處理的基本單位。詞法分析就是利用計算機對自然語言的形態 morphology 進行分析,判斷詞的結構和類別等。詞法分析的主要任務是 能正確的把一串連續的字元切分成乙個乙個的詞 能正確地判斷每個詞的詞性,以便於後續的句法分析的實現。常見的中...