亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 65271 | 回復: 7
打印 上一主題 下一主題

C-mini 程序設計語言的設計與實現(xiàn) [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2016-04-13 20:06 |只看該作者 |倒序瀏覽
本帖最后由 626788149 于 2016-04-13 20:08 編輯


最近一直在學習編譯原理的內(nèi)容,深知如果不自己動手實現(xiàn)一個編譯器,那么這就是在談一場不以結(jié)婚為目的的戀愛,這就是耍流氓。
所以從現(xiàn)在開始我要自己實現(xiàn)一個類似于c語言的編譯器,把設計的方案與細節(jié)總結(jié)在這里。

因為本人是邊學習邊實現(xiàn),可能速度上會有一點點慢。

非常希望這里的大神們能給我提提寶貴的意見,讓我在以后的學習中更加順利

先放上源碼Github:github.com/Zhang626/C-Mini

我還有一個csdn的博客跟這里是同步的,但是鏈接發(fā)不出來 醉了

論壇徽章:
0
2 [報告]
發(fā)表于 2016-04-13 20:11 |只看該作者
本帖最后由 626788149 于 2016-04-13 20:36 編輯

介紹
  這個語言與c語言非常相似,也與現(xiàn)有的很多程序設計語言有很多共同點。但也有很多地方與c語言不同,比如c-mini包含了foreach循環(huán)語句,在函數(shù)體中變量的聲明順序也與c語言不同。不同元素的類型使用不同的字體來表示:




關(guān)鍵字: for,while,foreach
記號TOKEN: ID,NUMLITERAL,STRLITERAL
非終結(jié)符:Nonterminals

TOKEN 的定義
letter = a | . . . | z | A | . . . | Z
digit = 0 | . . . | 9
NUMLITERAL = [+ | -] digit+
ID = letter (letter | digit)∗
STRLITERAL= "任何除了" 以外的字符"
BOOLITERAL = true | false
Comments = /* ......anything but except * /......  */
Whitespace =制表符,空格,換行
Keywords  = for | while | foreach | int | bool | char | void | if | else | return | break | true | false | def | in

typedef enum {
                ENDFILE , ERROR,
                /*multicharacter symbols*/
                ID, NUM , STRING,
                /*reserved word*/
                FOREACH , WHILE , INT , BOOL , CHAR , VOID , IF ,
                ELSE , RETURN , BREAK , TRUE , FALSE, DEF,
                /*SPECIAL SYMBOLS*/
                SEMI,ASSIGN,EQ,LT,BT,LQ,BQ,PLUS,MINUS,TIMES,
                OVER,LEFTPAREN,RIGHTPAREN,COMMA,CURLYBRACESL,
                CURLYBRACESR,PLUSPLUS,MINUSMINUS,SQUAREBRACKL,SQUAREBRACKR,
                /*whitespace*/
                BLANK,TABLE,NEWLINE               
} TokenType;

目標
我打算先寫解釋器,解釋器完成以后再寫代碼生成器生成字節(jié)碼

論壇徽章:
0
3 [報告]
發(fā)表于 2016-04-13 20:20 |只看該作者
本帖最后由 626788149 于 2016-04-13 20:34 編輯

文法

此文法經(jīng)過修改,使用遞歸下降解析只需要一個向前看符號就可以實現(xiàn)


1. programdeclarationList
2.  declarationListdeclarationList declaration | declaration
3. declarationvarDeclaration | funcDeclaration
4. varDeclarationtypeSpecifier varDeclList ;
6. varDeclListvarDeclList , varDeclInitialize | varDeclInitialize
7. varDeclInitializevarDeclId | varDeclId =simpleExpression
8. varDeclId → ID | ID [ NUMCONST ]
10. typeSpecifierint | bool | char| void
11. funcDeclarationdef  ID ( params ) typeSpecifier statement
12.  paramsparamList | ε
13. paramListparamList , paramTypeList | paramTypeList
14. paramTypeListtypeSpecifier paramId
16. paramId → ID | ID [ ]
17.  statement → expressionStmt | compoundStmt | ifStmt | whileStmt | foreachStmt | returnStmt | breakStmt
18. compoundStmt→ { localDeclarations statementList }

19. localDeclarations → localDeclarations VarDeclaration | ε
20. statementList → statementList statement | ε

21. expressionStmtexpression ; | ;
22. ifStmtif ( simpleExpression ) statement [ else statement ]
23. whileStmtwhile ( simpleExpression ) statement  
24. foreachStmtforeach ( mutable in simpleExpression ) statement
24. returnStmtreturn ; | return expression ;
25. breakStmtbreak ;
26. expression → mutable = expression | mutable += expression | mutable −= expression| mutable ∗= expression | mutable /= expression | mutable ++ | mutable −− | simpleExpression
27. simpleExpression → simpleExpression | andExpression | andExpression
28. andExpression → andExpression & unaryRelExpression | unaryRelExpression

29. unaryRelExpression ! unaryRelExpression | relExpression
30. relExpression → sumExpression relop sumExpression | sumExpression
31. relop → <= | < | > | >= | == | ! =
32. sumExpression → sumExpression sumop term | term
33. sumop + | −
34. term → term mulop unaryExpression | unaryExpression
35. mulop → ∗ | / | %
36. unaryExpression → unaryop unaryExpression | factor
37. unaryop → −
38. factor → immutable | mutable
39. mutable → ID | ID [ expression ]
40. immutable → ( expression ) | call | constant
41. call → ID ( args )
42. args → argList | ε
43. argList → argList , expression | expression
44. constant → NUMCONST | CHARCONST | STRINGCONST | true | false

論壇徽章:
9
程序設計版塊每日發(fā)帖之星
日期:2016-02-13 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-15 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-16 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-06-18 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-06-27 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-07-15 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-07-27 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-08-18 06:20:00
4 [報告]
發(fā)表于 2016-04-20 09:09 |只看該作者
頂一個,樓主繼續(xù)

論壇徽章:
12
射手座
日期:2014-10-02 11:31:29程序設計版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-27 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-05-27 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-05-25 06:20:00每日論壇發(fā)貼之星
日期:2016-05-24 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-05-24 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-05-23 15:33:59程序設計版塊每日發(fā)帖之星
日期:2016-05-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-04-26 06:20:00神斗士
日期:2015-12-03 09:27:3215-16賽季CBA聯(lián)賽之八一
日期:2016-12-29 09:56:05
5 [報告]
發(fā)表于 2016-05-25 21:16 |只看該作者
我沒有實際做過。
頂一個,樓主繼續(xù)

論壇徽章:
0
6 [報告]
發(fā)表于 2017-03-15 19:24 |只看該作者
頂,繼續(xù)更新啊 樓主

論壇徽章:
6
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-04 06:20:002015亞冠之鹿島鹿角
日期:2015-08-05 16:51:182015亞冠之全北現(xiàn)代
日期:2015-08-07 17:14:392015亞冠之武里南聯(lián)
日期:2015-08-11 15:33:03數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-02-02 06:20:00
7 [報告]
發(fā)表于 2019-07-02 16:28 |只看該作者
頂一個,樓主繼續(xù)

論壇徽章:
1
IT運維版塊每日發(fā)帖之星
日期:2015-12-20 06:20:00
8 [報告]
發(fā)表于 2020-04-02 18:12 |只看該作者
大牛,綁定。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP