請教編譯問題,編譯原理問題 求解

2025-03-09 05:10:20 字數 2489 閱讀 6135

編譯原理問題:求解

1樓:公羊如柳

e是文法開頭。ε代表終結符號(推理中代表終點或結果,程式語言中代表常量等)。e t 這些大寫字母一般代表非終結符號(這些代表中間過程,非結果。

程式中代表函式等等)。開始是e。因為有個g(e)。

e就是文法開始符號。推導就有e開始,它也是乙個非終結符(代表函式、或者乙個推導過程,類似於程式中的main(c++)winmain(vc++)dllmain(dll)等主函式)。

1算術表示式文法:這個文法是乙個遞迴文法。計算機進行邏輯推導時會走很多彎路(類似於遍歷一顆樹的過程)。

為了不讓計算機走彎路(提高效率的目的),可以變換為第二種文法。這種文法消除了遞迴(消除了歧義,類似於字尾表示式),使計算機可以一條直線走到底兒推匯出結果。

我也很久沒看編譯原理了。 呵呵。

2樓:匿名使用者

c語言中關於編譯的乙個問題?

你這樣的用法不能體現出前處理器的作用,前處理器在使用多個檔案特別是包含標頭檔案的時候就。

很有用了,一般對於單一檔案來講,用處不是很大。

下面簡單講一下邏輯前處理器#if的兩個用處。

#if指令用法一:測試某個符號是否以前用#define定義過,該用法的指令如下#if defined 識別符號 ….#endif 其縮寫形式為#ifdef 識別符號….

#endif表示如果,指定的識別符號已被#define定義,則中間的語句就包含在原始檔中,如果該識別符號還未被#define定義,則跳過#if和#endif之間的語句,該語句以#endif結束,還要注意的是識別符號前的關見字是defined比define多乙個字母d。

2、測試識別符號是否不存在:其語法為#if !defined 識別符號…..

#endif縮寫形式為#ifnedf 識別符號…..#endif表示如果指定的識別符號沒有定義,則把#if和#endif之間的語句包含在原始檔中,如果識別符號已定義則跳過#if和#endif之間的**,實標上#ifndef語句比#ifdef語句使用得更頻繁,因為系統使用該語句防止標頭檔案被多次包含,3、防止標頭檔案被包含多次的方法:其方法為#ifndef hy #define hy語句#endif程式在開始遇到識別符號hy時沒有被定義,這時執行後面的語句,再第二次被使用時則識別符號hy已經被定義,這時不會執行後面的語句,從而防止了同一標頭檔案被包含多次的情況。

這裡要注意使用#define後面定義的識別符號不需要值。

#if語句還可以使用邏輯運算子以測試多個值,比如#if defined hy1&&hy2….#endif當hy1與hy2都為真時才執行,同樣還可以使用其他邏輯運算子。

#if指令用法二:測試某個表示式的值是否為真,其語法格式為:#if 常量表示式….

#endif,注意常量表示式的求值結果應是整數常量表示式,比如#if a=2 ….#endif測試a的值是否為2,如果為2則執行#if與#endif之間的語句。

你這個編譯有問題啊

3樓:

關於在使用高階程式設計語言程式設計的過程中,產生的編譯錯誤是各種各樣的。數遲因此你必須要把詳細的程式源**寫出來,別人才能夠幫助你進行分析。

下面我以 c 語言為例,對程式出錯型別進行乙個大致的說明。

1)、語法錯誤。這類錯誤是最容易進行除錯的,因為如果程式中有語法錯誤,那麼程式在進行編譯時都通不過去(例如:程式中缺少分號、或者是使用了非法的變數名稱等);

2)、指標錯誤。這類錯誤是最難於除錯的。即:在程式進行編譯、鏈結時,不會產生任何出錯資訊,但是一旦程式執行,就會出現程式崩潰現象。如下源程式:

#include

#include

void main( )

char * p ; 定義了乙個字元指標變數 p */

p = char *)malloc(100000)*sizeof(char) ;為變數 p 動態分配記憶體 */

if( p ==null ) 該段**絕對不能夠省略。必須要判斷動態分配記憶體是否成功,絕對不能夠認為系統每次分配記憶體都一定成功 */

若記憶體分配失敗,則退出應用程式 */

printf("memory allocation failured !" )

exit(1) ;

gets(p) ;從鍵盤輸入一行資料,並儲存到 p 中 */

puts(p) ;在螢幕上顯示剛剛輸入的資料 */

free(p) ;釋放記憶體 */

3)、其它未知錯誤。例如:最簡單的除法程式。

#include

void main( )

int a, b ;

scanf("%d %d", a, &b) ;

if( b ==0 ) 該段**不能夠省略。兩個數做除法時,除數 b 不能夠為零。讓畢譽若為零,則退出應用程式 */

printf("b can't be zero !")

exit(1) ;

printf(" result is : d", a / b ) 坦段* 列印 a/b 的商 */

你可以根據我的思路,再對你的源**進行仔細除錯。

Linux核心編譯問題,編譯Linux核心的問題

2.4的核心升級到2.6有很多麻煩的,redhat9的2.4.20要想成功編譯2.6.8.1版核心需 要升級兩個工具 modutils和mkinitrd,至於2.6.18,我就不知道了。我以前試過一次,轉了一篇網上的文章,你也看看吧。多baidu,多google,希望你能成功了。缺少了true這個檔...

編譯原理 學的是什麼,什麼是編譯原理

編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程式構造的一般原理和基本方法。內容包括語言和文法 詞法分析 語法分析 語法制導翻譯 中間 生成 儲存管理 優化和目標 生成。編譯原理是計算機專業設定的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論 技術 方法上都對學生提供了系...

編譯原理程式設計,什麼是編譯程式

編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程式構造的一般原理和基本方法。內容包括語言和文法 詞法分析 語法分析 語法制導翻譯 中間 生成 儲存管理 優化和目標 生成。編譯原理是計算機專業設定的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論 技術 方法上都對學生提供了系...