C語言簡單子集編譯器功能設計書 第一版

2021-06-02 09:17:51 字數 3731 閱讀 1335

1. c語言簡單子集

c語言簡單子集具有如下特點:

1) 資料型別

僅支援簡單資料型別中的有符號2位元組整型(使用16位彙編實現,因此int回歸到古老的16位)。

2) 資料操作

支援以下資料操作:函式呼叫、賦值、四則運算、if、while、for、小於、大於、等於、小於等於、大於等於、不等於、邏輯與、邏輯或,支援多層括號運算。不支援變數初始化(自動初始化為0)。不支援連等、邏輯運算時的賦值。

3) 原始檔

僅支援單個***.c檔案程式,不支援標頭檔案。

4) 關鍵字集合

main、int、if、while、for

5) 巨集

不支援巨集。

6) 符號集合

(、)、、=、;、+、-、*、/、<、>、==、<=、>=、!=、&&、||、//

7) 函式

只支援無引數無返回值的函式。支援巢狀呼叫。main函式為程式入口。函式不能從中間返回,只能在最後一行返回,無「return」關鍵字。

8) 注釋

只支援單行注釋。

9) 定量制限

9.1) 函式名、變數名長度為1到32位元組

9.2) 常數必須是int範圍的整數(2位元組的古老int,即現代的short)

9.3) 最大單詞數、語法樹最大節點數為32768

9.4) 原始碼一行最多容納1024位元組,多出部分截斷

10) 輸入輸出

不支援輸入,程式輸出結果為所有使用者定義的變數在生命期結束時的值和對應的函式名,輸出到檔案c:\c_******_outfile(nt)或/tmp/c_******_outfile(linux)中。

例項:main()

a = 0;

while( a <= 10 )

if( a >= 10 )}}

}2. 基本語法

2.1) program

program := definition 『main』 『(』 『)』 『』

2.2) definition

definition := ( ( var_def | func_def )  definition  ) | null

2.3) var_def

var_def := 『int』 identify 『;』

2.4) func_def

func_def := identify 『(』 『)』 『』

2.5) identify

identify := alphabet  identify_follow

2.6) identify_follow

identify_follow := null | ( ( alphabet | number ) identify_follow )

2.7) body

body := var_definition statement_list

2.8) var_definition

var_definition := ( var_def var_definition ) | null

2.9) statement_list

statement_list := ( ( assign_stmt 『;』 | if_stmt | for_stmt | while_stmt | func_call ) statement_list ) | null

2.10) assign_stmt

assign_stmt := identify 『=』 formula

2.11) if_stmt

if_stmt := 『if』 『(』 bool_formula 『)』 『』

2.12) for_stmt

for_stmt := 『for』『(』 ( null | assign_stmt ) 『;』 bool_formula 『;』 ( null | assign_stmt ) 『)』 『』

2.13) while_stmt

while_stmt := 『while』 『(』 bool_formula 『)』 『』

2.14) formula

formula := ( (『(』 formula 『)』 ) | identify | numbers ) formula_follow

2.15) bool_formula

bool_formula := ( (『(』 bool_formula 『)』 ) | identify | numbers ) bool_formula_follow

2.16) formula_follow

formula_follow := null | ( 『+』|『-』 ) formula |  ( 『*』|『/』 ) formula

2.17) bool_formula_follow

bool_formula_follow := null | (『||』 bool_formula ) | ( 『&&』 bool_formula ) | ( ( 『<』|『>』 |『<=』 |『>=』 ) bool_formula ) | ( ( 『==』 |『!=』 ) bool_formula ) | ( ( 『+』|『-』 ) bool_formula ) | ( ( 『*』|『/』 ) bool_formula )

2.18 ) func_call

func_call := identify 『(』 『)』 『;』

3. 預處理

不支援標頭檔案。預處理時去除注釋,生成臨時檔案***.c.tmp。

4. 運算優先順序

operators                         associativity

() -> .                        left to right

! ~ ++ -- + - * (type) sizeof     right to left

* / %                             left to right

+ -                               left to right

<<  >>                            left to right

< <= > >=                         left to right

== !=                             left to right

&                                 left to right

^                                 left to right

|                                 left to right

&&                                left to right

||                                left to right

?:                                right to left

= += -= *= /= %= &= ^= |= <<= >>= right to left

,                                 left to right

5. 模組劃分

5.1) 預處理模組

5.2) 詞法語法分析器

5.3) 語義分析、彙編碼生成器

5.4) 可執行檔案生成器

6. 多平台

語法分析使用標準c編寫,支援多平台。可執行檔案生成模組,第一版只支援windowsxp。

C 語言 編譯器

c 語言是高階程式語言,人們在使用 c 語言工作的時候不必用數字碼表示指令,大大簡化了對於計算機底層暫存器的操作,人們可以把工作的重點放在 設計和具體功能的實現,編寫出更易讀易懂的 可是計算機的工作和人類正好相反,c 語言編寫的 對於計算機而言就好比是天書且沒有意義可言,因為計算機是識別機器語言的,...

C語言的編譯器

c語言的常用編譯器 目前最流行的c語言編譯器有以下幾種 gnu compiler collection 或稱 gcc microsoft c 或稱 ms c borland turbo c 或稱 turbo c 這些c語言版本不僅實現了ansi c標準,而且在此基礎上各自作了一些擴充,使之更加方便 ...

通過GCC編譯器編譯c語言

可以利用gcc的引數來控制執行的過程,這樣就可以更深入的了解編譯c程式的過程。下面將通過對乙個程式的編譯來演示整個過程。include int main 1 預處理 編譯器將c程式的標頭檔案編譯進來,還有巨集的替換,可以用gcc的引數 e來參看。作用 將hello.c預處理輸出hello.i 2 編...