導航:首頁 > 源碼編譯 > 編譯原理設計與開發

編譯原理設計與開發

發布時間:2024-05-01 18:44:10

『壹』 編譯原理與嵌入式的關系

總有一天你會想學的。現在不想學可以先放放,能過就行。興趣最重要,別磨滅了。以後用到了自然就想學了。
編譯原理主要講的是如何去做個編譯器。其中的很多概念對開發很有用,如有限狀態自動機。編譯器如何代碼優化,優化了那些部分。做嵌入式應該知道怎麼優化,畢竟資源是有限的。

『貳』 編譯原理課程設計

%{

/* FILENAME: C.Y */

%}
#define YYDEBUG_LEXER_TEXT (yylval) /* our lexer loads this up each time */
#define YYDEBUG 1 /* get the pretty debugging code to compile*/
#define YYSTYPE char * /* interface with flex: should be in header file */
/* Define terminal tokens */
/* keywords */
%token AUTO DOUBLE INT STRUCT
%token BREAK ELSE LONG SWITCH
%token CASE ENUM REGISTER TYPEDEF
%token CHAR EXTERN RETURN UNION
%token CONST FLOAT SHORT UNSIGNED
%token CONTINUE FOR SIGNED VOID
%token DEFAULT GOTO SIZEOF VOLATILE
%token DO IF STATIC WHILE
/* ANSI Grammar suggestions */
%token IDENTIFIER STRINGliteral
%token FLOATINGconstant INTEGERconstant CHARACTERconstant
%token OCTALconstant HEXconstant
/* New Lexical element, whereas ANSI suggested non-terminal */
%token TYPEDEFname /* Lexer will tell the difference between this and
an identifier! An identifier that is CURRENTLY in scope as a
typedef name is provided to the parser as a TYPEDEFname.*/
/* Multi-Character operators */
%token ARROW /* -> */
%token ICR DECR /* ++ -- */
%token LS RS /* << >> */
%token LE GE EQ NE /* <= >= == != */
%token ANDAND OROR /* && || */
%token ELLIPSIS /* ... */
/* modifying assignment operators */
%token MULTassign DIVassign MODassign /* *= /= %= */
%token PLUSassign MINUSassign /* += -= */
%token LSassign RSassign /* <<= >>= */
%token ANDassign ERassign ORassign /* &= ^= |= */
%start translation_unit
%%
/* CONSTANTS */
constant:
INTEGERconstant
| FLOATINGconstant
/* We are not including ENUMERATIONconstant here because we
are treating it like a variable with a type of "enumeration
constant". */
| OCTALconstant
| HEXconstant
| CHARACTERconstant
;

string_literal_list:
STRINGliteral
| string_literal_list STRINGliteral
;
/************************* EXPRESSIONS ********************************/
primary_expression:
IDENTIFIER /* We cannot use a typedef name as a variable */
| constant
| string_literal_list
| '(' comma_expression ')'
;
postfix_expression:
primary_expression
| postfix_expression '[' comma_expression ']'
| postfix_expression '(' ')'
| postfix_expression '(' argument_expression_list ')'
| postfix_expression {} '.' member_name
| postfix_expression {} ARROW member_name
| postfix_expression ICR
| postfix_expression DECR
;
member_name:
IDENTIFIER
| TYPEDEFname
;
argument_expression_list:
assignment_expression
| argument_expression_list ',' assignment_expression
;
unary_expression:
postfix_expression
| ICR unary_expression
| DECR unary_expression
| unary_operator cast_expression
| SIZEOF unary_expression
| SIZEOF '(' type_name ')'
;
unary_operator:
'&'
| '*'
| '+'
| '-'
| '~'
| '!'
;
cast_expression:
unary_expression
| '(' type_name ')' cast_expression
;
multiplicative_expression:
cast_expression
| multiplicative_expression '*' cast_expression
| multiplicative_expression '/' cast_expression
| multiplicative_expression '%' cast_expression
;
additive_expression:
multiplicative_expression
| additive_expression '+' multiplicative_expression
| additive_expression '-' multiplicative_expression
;
shift_expression:
additive_expression
| shift_expression LS additive_expression
| shift_expression RS additive_expression
;
relational_expression:
shift_expression
| relational_expression '<' shift_expression
| relational_expression '>' shift_expression
| relational_expression LE shift_expression
| relational_expression GE shift_expression
;
equality_expression:
relational_expression
| equality_expression EQ relational_expression
| equality_expression NE relational_expression
;
AND_expression:
equality_expression
| AND_expression '&' equality_expression
;
exclusive_OR_expression:
AND_expression
| exclusive_OR_expression '^' AND_expression
;
inclusive_OR_expression:
exclusive_OR_expression
| inclusive_OR_expression '|' exclusive_OR_expression
;
logical_AND_expression:
inclusive_OR_expression
| logical_AND_expression ANDAND inclusive_OR_expression
;
logical_OR_expression:
logical_AND_expression
| logical_OR_expression OROR logical_AND_expression
;
conditional_expression:
logical_OR_expression
| logical_OR_expression '?' comma_expression ':'
conditional_expression
;
assignment_expression:
conditional_expression
| unary_expression assignment_operator assignment_expression
;
assignment_operator:
'='
| MULTassign
| DIVassign
| MODassign
| PLUSassign
| MINUSassign
| LSassign
| RSassign
| ANDassign
| ERassign
| ORassign
;
comma_expression:
assignment_expression
| comma_expression ',' assignment_expression
;
constant_expression:
conditional_expression
;
/* The following was used for clarity */
comma_expression_opt:
/* Nothing */
| comma_expression
;
/******************************* DECLARATIONS *********************************/
/* The following is different from the ANSI C specified grammar.
The changes were made to disambiguate typedef's presence in
declaration_specifiers (vs. in the declarator for redefinition);
to allow struct/union/enum tag declarations without declarators,
and to better reflect the parsing of declarations (declarators
must be combined with declaration_specifiers ASAP so that they
are visible in scope).
Example of typedef use as either a declaration_specifier or a
declarator:
typedef int T;
struct S { T T;}; /* redefinition of T as member name * /
Example of legal and illegal statements detected by this grammar:
int; /* syntax error: vacuous declaration * /
struct S; /* no error: tag is defined or elaborated * /
Example of result of proper declaration binding:
int a=sizeof(a); /* note that "a" is declared with a type in
the name space BEFORE parsing the initializer * /
int b, c[sizeof(b)]; /* Note that the first declarator "b" is
declared with a type BEFORE the second declarator is
parsed * /
*/
declaration:
sue_declaration_specifier ';'
| sue_type_specifier ';'
| declaring_list ';'
| default_declaring_list ';'
;
/* Note that if a typedef were redeclared, then a declaration
specifier must be supplied */
default_declaring_list: /* Can't redeclare typedef names */
declaration_qualifier_list identifier_declarator {} initializer_opt
| type_qualifier_list identifier_declarator {} initializer_opt
| default_declaring_list ',' identifier_declarator {} initializer_opt
;

declaring_list:
declaration_specifier declarator {} initializer_opt
| type_specifier declarator {} initializer_opt
| declaring_list ',' declarator {} initializer_opt
;

declaration_specifier:
basic_declaration_specifier /* Arithmetic or void */
| sue_declaration_specifier /* struct/union/enum */
| typedef_declaration_specifier /* typedef*/
;

type_specifier:
basic_type_specifier /* Arithmetic or void */
| sue_type_specifier /* Struct/Union/Enum */
| typedef_type_specifier /* Typedef */
;

declaration_qualifier_list: /* const/volatile, AND storage class */
storage_class
| type_qualifier_list storage_class
| declaration_qualifier_list declaration_qualifier
;

type_qualifier_list:
type_qualifier
| type_qualifier_list type_qualifier
;

declaration_qualifier:
storage_class
| type_qualifier /* const or volatile */
;

type_qualifier:
CONST
| VOLATILE
;

basic_declaration_specifier: /*Storage Class+Arithmetic or void*/
declaration_qualifier_list basic_type_name
| basic_type_specifier storage_class
| basic_declaration_specifier declaration_qualifier
| basic_declaration_specifier basic_type_name
;

basic_type_specifier:
basic_type_name /* Arithmetic or void */
| type_qualifier_list basic_type_name
| basic_type_specifier type_qualifier
| basic_type_specifier basic_type_name
;

sue_declaration_specifier: /* Storage Class + struct/union/enum */
declaration_qualifier_list elaborated_type_name
| sue_type_specifier storage_class
| sue_declaration_specifier declaration_qualifier
;

sue_type_specifier:
elaborated_type_name /* struct/union/enum */
| type_qualifier_list elaborated_type_name
| sue_type_specifier type_qualifier
;

typedef_declaration_specifier: /*Storage Class + typedef types */
typedef_type_specifier storage_class
| declaration_qualifier_list TYPEDEFname
| typedef_declaration_specifier declaration_qualifier
;

typedef_type_specifier: /* typedef types */
TYPEDEFname
| type_qualifier_list TYPEDEFname
| typedef_type_specifier type_qualifier
;

storage_class:
TYPEDEF
| EXTERN
| STATIC
| AUTO
| REGISTER
;

basic_type_name:
INT
| CHAR
| SHORT
| LONG
| FLOAT
| DOUBLE
| SIGNED
| UNSIGNED
| VOID
;

elaborated_type_name:
aggregate_name
| enum_name
;

aggregate_name:
aggregate_key '{' member_declaration_list '}'
| aggregate_key identifier_or_typedef_name
'{' member_declaration_list '}'
| aggregate_key identifier_or_typedef_name
;

『叄』 璁$畻鏈虹戝︿笌鎶鏈涓撲笟錛氭墦閫犵紪紼嬮珮鎵

璁$畻鏈虹戝︿笌鎶鏈涓撲笟娑電洊浜嗘暟瀛︺佽嫳璇銆佺數瀛愭妧鏈銆佽$畻鏈虹戝︾悊璁哄拰搴旂敤絳夊氫釜棰嗗煙銆傚湪榪欎釜鍏呮弧鎸戞垬鍜屾満閬囩殑涓撲笟閲岋紝浣犲皢涓嶆柇鎷撳睍鑷宸辯殑鐭ヨ瘑鍜岃兘鍔涳紝鎴愪負璁$畻鏈虹戝︿笌鎶鏈棰嗗煙鐨勪郊浣艱咃紒
📈鎵撲笅鍧氬疄鐨勬暟瀛﹀熀紜
浠庨珮絳夋暟瀛︺佹傜巼緇熻″埌紱繪暎鏁板︼紝浣犲皢鎵撲笅鍧氬疄鐨勬暟瀛﹀熀紜錛屼負浣犳湭鏉ョ殑璁$畻鏈虹戝﹀拰搴旂敤鎻愪緵鏈夊姏鏀鎸併
🌍鍥介檯鑸炲彴鑷淇′氦嫻
澶у﹁嫳璇鍜屼笓涓氳嫳璇灝嗗姪浣犱竴鑷備箣鍔涳紝鍦ㄥ浗闄呰垶鍙頒笂鑷淇′氦嫻侊紝涓轟綘鐨勮亴涓氬彂灞曟墦寮鏇村箍闃旂殑瑙嗛噹銆
🔌鎵撲笅鐢靛瓙鎶鏈鍩虹
浣犲皢瀛︿範鐢佃礬銆佹ā鎷熺數瀛愬拰鏁板瓧鐢靛瓙錛屼負璁$畻鏈虹‖浠剁殑璁捐″拰寮鍙戞墦涓嬪潥瀹炲熀紜銆
💻娣卞叆璁$畻鏈虹戝︾悊璁
浣犲皢娣卞叆浜嗚В鏁版嵁緇撴瀯銆佹搷浣滅郴緇熴佺紪璇戝師鐞嗐佽$畻鏈虹綉緇滃拰鏁版嵁搴撳師鐞嗭紝涓轟綘鏈鏉ョ殑杞浠跺紑鍙戝拰緋葷粺璁捐℃彁渚涙湁鍔涙敮鎸併
👨‍💻鎴愪負緙栫▼楂樻墜
浣犲皢鎺ヨЕ鍒版眹緙栬璦銆丆++紼嬪簭璁捐°佹帴鍙f妧鏈銆丣ava鍜孷C++絳夌紪紼嬭璦鍜屽紑鍙戝伐鍏鳳紝璁╀綘鎴愪負緙栫▼楂樻墜銆
🔒淇濋┚鎶よ埅淇℃伅瀹夊叏
浣犲皢瀛︿範璁$畻鏈虹棶姣掑垎鏋愩佺綉緇滄敾鍑諱笌闃叉姢銆佸瘑鐮佸﹀簲鐢ㄧ瓑緗戠粶瀹夊叏鐭ヨ瘑錛屼負淇℃伅瀹夊叏淇濋┚鎶よ埅銆
🎮瀹炵幇娓告垙寮鍙戞ⅵ鎯
濡傛灉浣犲規父鎴忓紑鍙戞劅鍏磋叮錛岄偅涔堢綉緇滄父鎴忕悊璁恆佹父鎴忚捐″拰涓夌淮鍔ㄧ敾絳夎劇▼灝嗚╀綘瀹炵幇娓告垙寮鍙戠殑姊︽兂銆

『肆』 編譯原理和演算法分析與設計哪個更難

編譯原理和演算法分析與設計相比,演算法分析與設計更難。

演算法分析的話比較偏重整數規劃,數列的求解,組合數學等等,設計那就要靠悟性了,而且要見多識廣,不管你使用的是什麼語言,也不管語言怎麼發展,數據結構是變不了多少的。演算法設計也差不多,幫助你改善解決問題的思維。

演算法分析與設計的內容:

演算法設計與分析是整個CS課程體系當中最為重要的幾門課程之一,因為這門課是現代計算機科學發展的核心課程,和離散數學、數理邏輯四論地位相當,號稱必修中的必修,不過一般CS系不需要學數理邏輯四論,國內大學的四論教學開展的也不多。因此請大家一定要在這門課打好基礎,學好這門課能讓你未來的工作和學習非常輕松。

『伍』 編譯原理課程設計-詞法分析器設計(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所示:

具體的你在修改修改吧

『陸』 易語言的編譯原理和中間代碼是什麼

基本特點
易語言是一個自主開發,適合國情,不同層次不同專業的人員易學易用的漢語編程語言。易語言降低了廣大電腦用戶編程的門檻,尤其是根本不懂英文或者英文了解很少的用戶,可以通過使用本語言極其快速地進入Windows程序編寫的大門。易語言漢語編程環境是一個支持基於漢語字、詞編程的、全可視化的、跨主流操作系統平台的編程工具環境;擁有簡、繁漢語以及英語、日語等多語種版本;能與常用的編程語言互相調用;具有充分利用API,COM、DLL、OCX組件,各種主流資料庫,各種實用程序等多種資源的介面和支撐工具。易語言有自主開發的高質量編譯器,中文源代碼被直接編譯為CPU指令,運行效率高,安全可信性高;擁有自己的資料庫系統,且支持訪問現有所有資料庫;內置專用輸入法,支持中文語句快速錄入,完全解決了中文輸入慢的問題;易語言除了支持界面設計的可視化,還支持程序流程的即時可視化;除了語句的中文化之外,易語言中還專門提供了適合中國國情的命令,如中文格式日期和時間處理、漢字發音處理、全半形字元處理、人民幣金額的處理等;易語言綜合採用了結構化、面向對象、組件、構架、集成化等多種先進技術,並在運行效率、性能價格比、全可視化支持、適應本地化需要、面向對象以及提供Windows,Linux上的運行平台等具有特色;現有各種支持庫多達40多個,用戶可以使用她來滿足幾乎所有的Windows編程需求,多媒體功能支持強大,完善的網路、埠通訊和互聯網功能支持,網上與論壇上的學習資源眾多。在易語言及其編譯器的設計與實現、可視化漢語編程的構建、提供多種語言版本等方面具有創新。目前易語言已取得國家級鑒定,鑒定會專家一致認為:易語言在技術上居於國內領先地位,達到了當前同類產品的國際先進水平。
支持庫
易語言支持庫類似於普通的程序的DLL文件。
這個支持庫是易語言專用的,別的程序調用不了的,擴展名有fnr、fne、npk三種。
fnr、fne都是製作好的DLL文件,例如系統核心支持庫、應用介面支持庫。該類支持庫一般由用戶使用C++或Delphi製作,具體可以看易語言支持庫開發手冊。
npk屬於易語言COM包裝支持庫,該支持庫是引用COM包裝庫生成的,例如WebBrowser、Windows媒體播放器。該擴展名格式支持庫可用記事本、寫字板打開。該支持庫可以由用戶製作,製作方法:在易語言上點擊工具--「類型庫或OCX組件→支持庫」命令。

模塊
大型軟體項目的實施一般是分工協作開發,為了支持這一點,易語言提供了模塊化開發支持。易語言中的模塊稱為易模塊。通過使用易模塊,用戶可以將常用的代碼封裝起來重復使用到其它程序,或提供給第三方使用,或用作開發大型軟體項目中的某個部分,然後在軟體項目的封裝階段將所有這些模塊組織編譯成為一個完整程序,易模塊的擴展名為.ec。同時易語言支持大量非官方擴展模塊,用戶可自行編譯模塊,易語言5.11靜態編譯版本發布!很多易語言本身不存在的功能,私人開發的模塊基本會有,更多私人開發出具有特色功能出來,模塊的使用使得易語言突顯「易」字,大大增加了易語言的用戶人群。

閱讀全文

與編譯原理設計與開發相關的資料

熱點內容
怎樣刪除手機內不用的英文文件夾 瀏覽:81
android獲得屏幕寬度 瀏覽:302
單片機根據波形寫代碼 瀏覽:669
應屆生程序員怎麼投簡歷 瀏覽:721
數學建模演算法與應用ppt 瀏覽:99
遠程怎麼訪問端游伺服器 瀏覽:106
打電話定位置的源碼 瀏覽:642
即時通訊平台源碼 瀏覽:457
安卓自助app怎麼轉到蘋果手機 瀏覽:328
雅馬哈迴音壁不能識別源碼 瀏覽:730
python如何移植到安卓 瀏覽:29
黃柱選股公式源碼 瀏覽:639
教育系統源碼達標 瀏覽:888
音效卡驅動安裝程序在哪個文件夾 瀏覽:61
錢還完了銀行不給解壓 瀏覽:170
linux的系統調用表 瀏覽:752
php怎麼轉換頁面 瀏覽:547
我的世界買了伺服器之後怎麼開服 瀏覽:829
r1234yf汽車空調壓縮機 瀏覽:147
ftp伺服器地址欄 瀏覽:902