Compiler-Construction-Principle-and-Practice
Exercises about Compiler Construction in NPU and a simplified C compiler.
Usage
Jiang Dan Ge Gong Cheng Wen Jian Jia Dao Ru Dao eclipseZhong ,Zhong Jian Bu Zou De Wen Dang He Ce Shi Fang An Zai Mei Ge Wen Jian Jia Xia De wordWen Dang Zhong .
Exercise 1 Ci Fa Fen Xi Cheng Xu (Lexical Analysis)
Ju Ti Yao Qiu Ji Fen Xi Jian Lexical Analysis
Exercise 2 Yu Fa Fen Xi Cheng Xu (Gramma Analysis)
Ju Ti Yao Qiu Ji Fen Xi Jian Gramma Analysis
Qi Mo Fu Xi Ti Gang (Outline)
Gen Ju Ke Tang PPTShun Xu He Kao Dian Zheng Li . Dian Ji Qian Wang
CYu Yan Zi Ji Bian Yi Qi (Simplified C compiler)
Xiao Xing CYu Yan Bian Yi Qi ,Wen Fa Shi CYu Yan De Zi Ji ,Neng Jiang CYu Yan Bian Yi Wei Hui Bian Yu Yan ,Bing Qie Jiang Ci Fa Fen Xi Jie Guo , Yu Fa Fen Xi Bu Zou , Zhong Jian Dai Ma He Hui Bian Yu Yan Fen Bie Shu Chu Dao txtWen Dang Zhong .
LL(1)Wen Fa :
1. Wen Fa Kai Shi :
- S->void main(){A}
2. Sheng Ming :
- X->YZ;
- Y->int|char|bool
- Z->UZ'
- Z'->,Z|$
- U->idU'
- U'->=L|$
3. Fu Zhi :
- R->id=L;
4. Suan Zhu Yun Suan :
- L->TL'
- L'->+L|-L|$
- T->FT'
- T'->*T|/T|$
- F->(L)
- F->id|num
- O->++|--|$
- Q->idO|$
5. Bu Er Yun Suan :
- E->HE'
- E'->&&E|$
- H->GH'
- H'->||H
- H'->$
- G->FDF
- D-><|>|==|!=
- G->(E)
- G->!E
6. Kong Zhi Yu Ju :
- B->if (E){A}else{A}
- B->while(E){A}
- B->for(YZ;G;Q){A}
7. Gong Neng Han Shu :
- B->printf(P);
- B->scanf(id);
- P->id|ch|num
8. Fu He Yu Ju :
- A->CA
- C->X|B|R
- A->$
Gou Zao LL(1)Shu Xing Fan Yi Wen Fa
Gou Zao LL1Shu Xing Fan Yi Wen Fa Ji Zai Yuan You LL1Wen Fa Ji Chu Shang Jia Shang Dong Zuo Fu Hao ,Bing Gei Fei Zhong Jie Fu He Zhong Jie Fu Jia Shang Yi Ding Shu Xing ,Gei Dong Zuo Fu Hao Jia Shang Yu Yi Zi Cheng Xu .
1.Fu Zhi
| Chan Sheng Shi | Yu Yi Zi Cheng Xu |
|---|---|
| R->@ASS_R id =L@ EQ; | @ASS_R{R.VAL=idBing Ya Ru Yu Yi Zhan } |
| Tong Shang | @EQ{RES=R.VAL, OP='=', ARG1=L.VAL, new FourElement(OP,ARG1,/, RES)} |
| U->@ASS_U idU' | @ASS_U{U.VAL=idBing Ya Ru Yu Yi Zhan } |
| U' -> =L|$@EQ_U' | @EQ_U'{RES=U.VAL, OP='=', ARG1=L.VAL, new FourElement(OP,ARG1,/, RES)} |
2.Suan Zhu Yun Suan
| Chan Sheng Shi | Yu Yi Zi Cheng Xu |
|---|---|
| L->TL' | @ADD_SUB {If(OP!=null) RES= NEWTEMP( ); L.VAL=RES,Bing Ya Ru Yu Yi Zhan ;New FourElement(OP, T.VAL, L'.VAL, RES),} |
| L'->+L | @ADD {OP=+, ARG2=L.VAL} |
| T->FT' | @DIV_MUL { if (OP !=null) RES= NEWTEMP( ); T.VAL=RES; new FourElement(OP,F.VAL,ARG2, RES) else ARG1=F.VAL; } |
| T'->/T | @DIV {OP=/, ARG2=T.VAL} |
| T'->*T | @MUL {OP=x, ARG2=T.VAL} |
| O-> @SINGLE_OP ++|--|$ | @SINGLE_OP{OP=++|--} |
3.Bu Er Yun Suan
| Chan Sheng Shi | Yu Yi Zi Cheng Xu |
|---|---|
| G->FDF | @COMPARE{OP=D.VAL; ARG1=F(1).VAL; ARG2=F(2).VAL, RES=NEWTEMP( ); new FourElement(OP,F.VAL,ARG2,RES); G.VAL=RESBing Ya Ru Yu Yi Zhan } |
| D-><|>|==|!= | @COMPARE_OP<|>|==|!={D.VAL=<|>|==|!=Bing Ya Ru Yu Yi Zhan } |
4.Kong Zhi Yu Ju
| Chan Sheng Shi | Yu Yi Zi Cheng Xu |
|---|---|
| B->if (G)@IF_FJ{A}@IF_BACKPATCH_FJ @IF_RJ else{A}@IF_BACKPATCH_RJ | @IF_FJ{OP="FJ";ARG1=G.VAL;RES=if_fj, New FourElement(OP,ARG1,/, RES ),Jiang Qi Cha Ru Dao Si Yuan Shi Lie Biao Zhong Di iGe } @IF_BACKPATCH_FJ{Hui Tian Qian Mian Jia Chu Kou Tiao Zhuan Si Yuan Shi De Tiao Zhuan Xu Hao , BACKPATCH (i,if_fj)} |
| B->while(G)@WHILE_FJ{A}@WHILE_RJ@WHILE_BACKPATCH_FJ | {Can Zhao if-else} |
| B->for(YZ;G@FOR_FJ;Q){A@SINGLE}@FOR_RJ@FOR_BACKPATCH_FJ | {Can Zhao if-else} @SINGLE {ARG1=id;RES=NEWTEMP( );New FourElement(OP,ARG1,/,RES)} |
Shuo Ming :
(1)R.VALBiao Shi Fu Hao RDe Zhi ,VALShi RDe Yi Ge Shu Xing ,Qi Ta De Lei Si . (2)NEWTEMP()Han Shu :Mei Diao Yong Yi Ci Sheng Cheng Yi Ge Lin Shi Bian Liang ,Yi Ci Wei T1,T2 ,... ,Tn.
(3)BACKPATCH(int i,int res):Hui Tian Han Shu ,Yong resHui Tian Di iGe Si Yuan Shi De Tiao Zhuan Di Zhi .
(4)New fourElement(String OP,String ARG1,String ARG2,String RES):Sheng Cheng Yi Ge Si Yuan Shi (OP,ARG1,ARG2,RES).
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.