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

Chinaunix

標(biāo)題: C-mini 程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)與實(shí)現(xiàn) [打印本頁(yè)]

作者: 626788149    時(shí)間: 2016-04-13 20:06
標(biāo)題: C-mini 程序設(shè)計(jì)語(yǔ)言的設(shè)計(jì)與實(shí)現(xiàn)
本帖最后由 626788149 于 2016-04-13 20:08 編輯


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

因?yàn)楸救耸沁厡W(xué)習(xí)邊實(shí)現(xiàn),可能速度上會(huì)有一點(diǎn)點(diǎn)慢。

非常希望這里的大神們能給我提提寶貴的意見(jiàn),讓我在以后的學(xué)習(xí)中更加順利

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

我還有一個(gè)csdn的博客跟這里是同步的,但是鏈接發(fā)不出來(lái) 醉了
作者: 626788149    時(shí)間: 2016-04-13 20:11
本帖最后由 626788149 于 2016-04-13 20:36 編輯

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




關(guān)鍵字: for,while,foreach
記號(hào)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;

目標(biāo)
我打算先寫解釋器,解釋器完成以后再寫代碼生成器生成字節(jié)碼
作者: 626788149    時(shí)間: 2016-04-13 20:20
本帖最后由 626788149 于 2016-04-13 20:34 編輯

文法

此文法經(jīng)過(guò)修改,使用遞歸下降解析只需要一個(gè)向前看符號(hào)就可以實(shí)現(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
作者: mordorwww    時(shí)間: 2016-04-20 09:09
頂一個(gè),樓主繼續(xù)
作者: patagonia2    時(shí)間: 2016-05-25 21:16
我沒(méi)有實(shí)際做過(guò)。
頂一個(gè),樓主繼續(xù)
作者: Jeremy_W    時(shí)間: 2017-03-15 19:24
頂,繼續(xù)更新啊 樓主
作者: lxy572535121    時(shí)間: 2019-07-02 16:28
頂一個(gè),樓主繼續(xù)
作者: goingstudy    時(shí)間: 2020-04-02 18:12
大牛,綁定。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2