亚洲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.
program
→
declarationList
2.
declarationList
→
declarationList
declaration
|
declaration
3.
declaration
→
varDeclaration
|
funcDeclaration
4.
varDeclaration
→
typeSpecifier
varDeclList
;
6.
varDeclList
→
varDeclList
,
varDeclInitialize
|
varDeclInitialize
7.
varDeclInitialize
→
varDeclId
|
varDeclId
=
simpleExpression
8.
varDeclId
→ ID | ID [ NUMCONST ]
10.
typeSpecifier
→
int
|
bool
|
char
|
void
11.
funcDeclaration
→
def
ID
(
params
)
typeSpecifier
statement
12.
params
→
paramList
| ε
13.
paramList
→
paramList
,
paramTypeList | paramTypeList
14.
paramTypeList
→
typeSpecifier
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.
expressionStmt
→
expression
; | ;
22.
ifStmt
→
if
( simpleExpression )
statement
[
else
statement
]
23.
whileStmt
→
while
(
simpleExpression
)
statement
24.
foreachStmt
→
foreach
(
mutable
in
simpleExpression
)
statement
24.
returnStmt
→
return
; |
return
expression
;
25.
breakStmt
→
break
;
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