ﺗﻌﺮﯾﻒ ﻓﺎز اول ﭘﺮوژﻩ ﮐﺎﻣﭙﺎﯾﻠﺮ ﻧﻴﻢﺳﺎل اول – 86-87دﮐﺘﺮ اﺑﻮاﻟﺤﺴﻨﯽ ﻣﻮﻋﺪ ﺗﺤﻮﯾﻞ86/8/29 : ﭘﺮوژﻩﯼ اﯾﻦ درس ،ﯾﮏ ﮐﺎﻣﭙﺎﯾﻠﺮ ﮐﺎﻣﻞ از زﺑﺎن MiniJavaﺑﻪ زﺑﺎن ﻣﺎﺷﻴﻦ اﺳﺖ. ﻃﯽ اﻧﺠﺎم ﺁن ﺷﻤﺎ ﺑﺎ ﻣﺮاﺣﻞ ﻃﺮاﺣﯽ و ﭘﻴﺎدﻩﺳﺎزﯼ ﯾﮏ ﮐﺎﻣﭙﺎﯾﻠﺮ ﺗﺎ ﺣﺪﯼ ﺁﺷﻨﺎ ﺧﻮاهﻴﺪﺷﺪ .اﯾﻦ ﭘﺮوژﻩ در 3ﯾﺎ 4ﻓﺎز ﺗﻌﺮﯾﻒ ﺧﻮاهﺪﺷﺪ .ﺑﺮﻧﺎﻣﻪ را ﺑﺎﯾﺪ ﺑﻪ زﺑﺎن Javaﺑﻨﻮﯾﺴﻴﺪ .ﺣﺠﻢ ﮐﺎر زﯾﺎد اﺳﺖ و ﺷﻤﺎ ﺑﺎﯾﺪ در ﮔﺮوﻩهﺎﯼ ﯾﮏ ﯾﺎ دو ﻧﻔﺮﻩ ﺁنرا اﻧﺠﺎم دهﻴﺪ؛ ﮔﺮوﻩهﺎ ﭘﺲ از اﻧﺠﺎم ﻓﺎز اول ﻗﺎﺑﻞ ﺗﻐﻴﻴﺮ ﻧﺨﻮاهﻨﺪ ﺑﻮد .در هﺮ ﻓﺎز ﺑﻪ هﻤﺮاﻩ ﺧﻮد ﺑﺮﻧﺎﻣﻪ ،ﺑﺎﯾﺪ documentationﻧﻴﺰ ارﺳﺎل ﮐﻨﻴﺪ ،ﺷﺎﻣﻞ ﺗﻮﺿﻴﺤﺎﺗﯽ ﺟﺎﻣﻊ درﺑﺎرﻩﯼ اﯾﻦ ﮐﻪ ﭼﻪ ﮐﺎر ﮐﺮدﻩاﯾﺪ )ﻻزم ﻧﻴﺴﺖ ﺧﻴﻠﯽ ﻣﻔﺼﻞ ﺑﺎﺷﺪ ،ﺣﺪود 2ﺻﻔﺤﻪ( ،و اﯾﺪﻩهﺎﯾﯽ ﮐﻪ ﺑﻪ ذهﻨﺘﺎن رﺳﻴﺪﻩ و اﻋﻤﺎل ﮐﺮدﻩاﯾﺪ. در ﻓﺎز اول ﺑﺎﯾﺪ ﺑﺮﻧﺎﻣﻪاﯼ ﺑﻨﻮﯾﺴﻴﺪ ﮐﻪ اﻋﻤﺎل lexical analysisو parsingو ﺳﺎﺧﺖ abstract syntax treeرا اﻧﺠﺎم دهﺪ .ﺑﺮاﯼ دو ﻋﻤﻞ اول ﺑﺮﻧﺎﻣﻪهﺎﯾﯽ وﺟﻮد دارﻧﺪ ﮐﻪ ﺑﺎ ﮔﺮﻓﺘﻦ ﺳﺎﺧﺘﺎر زﺑﺎن ،ﻗﺴﻤﺖ ﺳﻨﮕﻴﻦ ﮐﺎر را اﻧﺠﺎم ﻣﯽدهﻨﺪ؛ وﻟﯽ ﺑﺮاﯼ ﻋﻤﻞ ﺳﻮم ﺷﻤﺎ ﺑﺎﯾﺪ ﺣﺠﻢ اﺻﻠﯽ ﮐﺪ را ﺑﻨﻮﯾﺴﻴﺪ .ﺗﺮﺗﻴﺐ زﯾﺮ ﺑﺮاﯼ اﻧﺠﺎم اﯾﻦ ﮐﺎر ﭘﻴﺸﻨﻬﺎد ﻣﯽﺷﻮد: .1ﺑﺎ زﺑﺎن MiniJavaﺁﺷﻨﺎ ﺷﻮﯾﺪ! در ] [1ﻣﯽﺗﻮاﻧﻴﺪ ﮔﺮاﻣﺮ اﯾﻦ زﺑﺎن را ﺑﺒﻴﻨﻴﺪ. اﯾﻦ زﺑﺎن ﺑﺴﻴﺎر ﺷﺒﻴﻪ Javaاﺳﺖ وﻟﯽ از ﺁن ﺳﺎدﻩﺗﺮ اﺳﺖ .وﺟﻪ ﺗﻤﺎﯾﺰهﺎﯼ ﺁن ﺑﺎ Javaرا ﯾﺎد ﺑﮕﻴﺮﯾﺪ .ﺑﻪﻋﻼوﻩ دﻗﺖ ﮐﻨﻴﺪ ﮐﻪ ﮔﺮاﻣﺮ دادﻩﺷﺪﻩ ﻣﺒﻬﻢ ) (ambiguousاﺳﺖ .ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اوﻟﻮﯾﺖ اﭘﺮاﺗﻮرهﺎ ،ﮐﻪ هﻤﺎن اوﻟﻮﯾﺖ ﻣﻌﻤﻮﻟﯽ زﺑﺎن Javaاﺳﺖ ،ﮔﺮاﻣﺮ ﻏﻴﺮﻣﺒﻬﻤﯽ ﺑﺮاﯼ ﺁن ﺑﻪ دﺳﺖﺁورﯾﺪ. .2ﺑﺎ ﻧﺮماﻓﺰار JLexﺁﺷﻨﺎ ﺷﻮﯾﺪ! در ] [2ﻣﯽﺗﻮاﻧﻴﺪ اﻃﻼﻋﺎت ﻣﺮﺑﻮﻃﻪ را ﭘﻴﺪا ﮐﻨﻴﺪ و ﺑﺮﻧﺎﻣﻪ را درﯾﺎﻓﺖ ﮐﻨﻴﺪ .اﯾﻦ ﺑﺮﻧﺎﻣﻪ ﺷﺒﻴﻪ Lexﯾﮏ lexical analyzer generatorاﺳﺖ وﻟﯽ ﺧﺮوﺟﯽ ﺁن ﯾﮏ ﺑﺮﻧﺎﻣﻪﯼ Javaاﺳﺖ. ﻃﺮز ﮐﺎر ﺑﺎ ﺁن را ﯾﺎد ﺑﮕﻴﺮﯾﺪ ،ﺳﭙﺲ ﻣﺸﺨﺼﺎت MiniJavaرا ﺑﻪ ﺁن ﺑﺪهﻴﺪ و ﯾﮏ lexical analyzerﺑﺮاﯼ MiniJavaﺑﺴﺎزﯾﺪ. .3ﺑﺎ ﻧﺮماﻓﺰار CUPﺁﺷﻨﺎ ﺷﻮﯾﺪ! در ] [3ﻣﯽﺗﻮاﻧﻴﺪ اﻃﻼﻋﺎت ﻣﺮﺑﻮﻃﻪ را ﭘﻴﺪا ﮐﻨﻴﺪ و ﺑﺮﻧﺎﻣﻪ را درﯾﺎﻓﺖ ﮐﻨﻴﺪ .اﯾﻦ ﺑﺮﻧﺎﻣﻪ ﺷﺒﻴﻪ Yaccﯾﮏ parser generatorاﺳﺖ و ورودﯼ/ﺧﺮوﺟﯽ ﺁن ﺑﻪ Javaاﺳﺖ CUP .ﯾﮏ LALR parserﺗﻮﻟﻴﺪ ﻣﯽﮐﻨﺪ .ﻃﺮز ﮐﺎر ﺑﺎ ﺁن را ﯾﺎد ﺑﮕﻴﺮﯾﺪ .ﺳﭙﺲ ﺑﻪ ﮐﻤﮏ ﻣﺸﺨﺼﺎت ) MiniJavaﮔﺮاﻣﺮ ﻏﻴﺮﻣﺒﻬﻤﯽ ﮐﻪ ﺳﺎﺧﺘﻪاﯾﺪ( و ﺧﺮوﺟﯽ ،JLexﯾﮏ parserﺑﺮاﯼ MiniJavaﺑﺴﺎزﯾﺪ. .4ﺳﺎﺧﺘﺎر ) abstract syntax tree (ASTﺧﻮد را ﻣﻌﻠﻮم ﮐﻨﻴﺪ ،ﯾﻌﻨﯽ ﺗﻌﻴﻴﻦ ﮐﻨﻴﺪ ﮐﻪ nodeهﺎﯼ ASTﺷﻤﺎ از ﭼﻪ ﻧﻮﻋﯽ ﺑﺎﯾﺪ ﺑﺎﺷﺪ ،و ﭼﮕﻮﻧﻪ ﺑﺎﯾﺪ ﺑﺎ هﻢ ارﺗﺒﺎط داﺷﺘﻪﺑﺎﺷﻨﺪ .ﺑﺮاﯼ ﺗﻌﺮﯾﻒ ASTﺑﻪ ﺑﺨﺶ 2.8.2ﮐﺘﺎب ﻣﺮاﺟﻌﻪ ﮐﻨﻴﺪ .ﻣﺒﺎﺣﺚ ﮐﺎﻣﻞﺗﺮ در اﯾﻦ ﻣﻮرد در ﻓﺼﻞ 5ﺁﻣﺪﻩاﺳﺖ .ﻃﺮاﺣﯽ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﮔﻮﻧﻪاﯼ ﺑﺎﺷﺪ ﮐﻪ ،اوﻻً در هﻨﮕﺎم parseﺑﺘﻮان اﯾﻦ درﺧﺖ را ﺑﺪون دردﺳﺮ زﯾﺎد ﺳﺎﺧﺖ ،ﺛﺎﻧﻴﺎً ﺑﺘﻮان )ﺑﻌﺪاً( راﺣﺖ اﯾﻦ درﺧﺖ را ﻃﯽ ﮐﺮد و ﻋﻤﻠﻴﺎﺗﯽ ﻣﺜﻞ type-checkingو ﺗﻮﻟﻴﺪ ﮐﺪ ﻣﻴﺎﻧﯽ را روﯼ ﺁن اﻧﺠﺎم داد .ﺑﻪ ﺧﺼﻮص ﺑﻪ nodeهﺎﯾﯽ ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ ﺗﻌﺪاد ﻓﺮزﻧﺪاﻧﺸﺎن ﻣﺘﻐﻴﺮ اﺳﺖ، ﻣﺜﻼً function callهﺎ .ﺷﺎﯾﺪ ] [4ﺑﺘﻮاﻧﺪ ﺑﻪ ﺷﻤﺎ ﺑﺮاﯼ ﯾﮏ ﻃﺮاﺣﯽ ﺧﻮب اﯾﺪﻩ ﺑﺪهﺪ. .5ﺑﺮﻧﺎﻣﻪﯼ ﺗﻮﻟﻴﺪﯼ ﺗﻮﺳﻂ ،CUPﻓﻘﻂ parseﻣﯽﮐﻨﺪ وﻟﯽ parse treeﺑﻪ ﺷﻤﺎ ﻧﻤﯽدهﺪ .در ﻣﻘﺎﺑﻞ اﯾﻦ اﻣﮑﺎن را ﺑﻪ ﺷﻤﺎ ﻣﯽدهﺪ ﮐﻪ در هﻨﮕﺎم parseﮐﺮدن ،ﮐﺪهﺎﯼ دﻟﺨﻮاهﯽ را اﺟﺮا ﮐﻨﻴﺪ .ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻃﺮاﺣﯽ ﺧﻮد در ﻣﺮﺣﻠﻪﯼ ﻗﺒﻞ ،ﮐﺪهﺎﯼ ﻣﺮﺑﻮﻃﻪ را ﺑﻨﻮﯾﺴﻴﺪ ﺗﺎ ﺑﻪ ﺑﺮﻧﺎﻣﻪاﯼ ﺑﺮﺳﻴﺪ ﮐﻪ ﻋﻤﻞ ﺳﺎﺧﺖ ASTرا ﻧﻴﺰ اﻧﺠﺎم ﻣﯽدهﺪ .اﯾﻦ ﻗﺴﻤﺖ ﺧﺴﺘﻪﮐﻨﻨﺪﻩﺗﺮﯾﻦ و ﻃﻮﻻﻧﯽﺗﺮﯾﻦ ﻗﺴﻤﺖ ﮐﺎر اﺳﺖ. ﻧﮑﺎت: 9اﯾﻦ ﭘﺮوژﻩ وﻗﺖﮔﻴﺮ اﺳﺖ و ﻣﻬﻠﺖ ﮐﺎر ﺑﻪ هﻤﻴﻦ دﻟﻴﻞ زﯾﺎد درﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪﻩ .هﺮ ﭼﻪ ﺳﺮﯾﻊﺗﺮ ﮐﺎر را ﺷﺮوع ﮐﻨﻴﺪ ﺗﺎ وﻗﺖ ﮐﻢ ﻧﻴﺎورﯾﺪ .ﻣﻬﻠﺖ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺗﻤﺪﯾﺪ ﻧﺨﻮاهﺪﺷﺪ ،و دﯾﺮﮐﺮد ﺟﺮﯾﻤﻪ ﺧﻮاهﺪداﺷﺖ .ﭘﺲ از ﯾﮏ هﻔﺘﻪ ﭘﺲ از ﻣﻬﻠﺖ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ،ﻧﻤﺮﻩاﯼ ﻧﺨﻮاهﻴﺪﮔﺮﻓﺖ .ﺑﻪﻋﻼوﻩ، در ﻓﺎزهﺎﯼ ﺑﻌﺪﯼ از ﺧﺮوﺟﯽ اﯾﻦ ﻓﺎز ﺧﻮد اﺳﺘﻔﺎدﻩ ﺧﻮاهﻴﺪﮐﺮد ﭘﺲ ﺳﻌﯽ ﮐﻨﻴﺪ ﺣﺘﻤﺎً ﺗﺎ زﻣﺎن ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺑﺮﻧﺎﻣﻪ را ﺗﮑﻤﻴﻞ ﮐﻨﻴﺪ. 9ﭘﺮوژﻩ در ﮔﺮوﻩهﺎﯼ ﺣﺪاﮐﺜﺮ دو ﻧﻔﺮﻩ ﺑﺎﯾﺪ اﻧﺠﺎم ﺷﻮد و ﺗﺎ ﻓﺎز اول هﻢﮔﺮوهﯽهﺎﯼ ﺧﻮد را ﺑﺎﯾﺪ ﺷﻨﺎﺣﺘﻪ ﺑﺎﺷﻴﺪ ،هﺮ ﻓﺮدﯼ در ﻓﺎز اول هﻢﮔﺮوهﯽ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺎﯾﺪ ﺗﻨﻬﺎﯾﯽ ﭘﺮوژﻩ را ﺗﺎ ﻓﺎز ﻧﻬﺎﯾﯽ ﺗﺤﻮﯾﻞ دهﺪ. 9ﻧﻤﺮﻩهﺎﯼ هﻢﮔﺮوهﯽهﺎ ﯾﮑﺴﺎن ﻧﺨﻮاهﺪ ﺑﻮد و ﺑﺮ اﺳﺎس ﻣﻴﺰان ﻣﺸﺎرﮐﺖ در ﭘﺮوژﻩ ﺧﻮاهﺪ ﺑﻮد. 9ﺑﺮﻧﺎﻣﻪ ﻧﻬﺎﯾﯽ ﺧﻮد +ﻓﺎﯾﻞ ورودﯼ ﮐﻪ ﺑﻪ JLexدادﻩاﯾﺪ +ﻓﺎﯾﻞ ورودﯼ ﮐﻪ ﺑﻪ CUPدادﻩاﯾﺪ documentation +را ﺑﻪ ﺻﻮرت proj1-sn1-sn2.zip درﺁوردﻩ )اﮔﺮ ﺗﻨﻬﺎ هﺴﺘﻴﺪ ﺑﻪ ﺻﻮرت (proj1-sn.zipو ﺑﻪ ce.compiler.course@gmail.comارﺳﺎل ﮐﻨﻴﺪ Subject .ﻧﻴﺰ ﺑﺎﯾﺪ ﻣﺸﺎﺑﻪ اﺳﻢ ﻓﺎﯾﻞ ﺑﺎﺷﺪ ،ﺑﺪون ﭘﺴﻮﻧﺪ .ﭘﺮوژﻩ ﺗﺤﻮﯾﻞ ﺣﻀﻮرﯼ ﻧﻴﺰ ﺧﻮاهﺪ داﺷﺖ ،ﮐﻪ اﻋﻼم ﺧﻮاهﺪﺷﺪ. 9اﮔﺮ ﺳﻮاﻟﯽ داﺷﺘﻴﺪ در Discussion Areaﻣﻄﺮح ﮐﻨﻴﺪ ﯾﺎ ﺑﻪ abbas.mehrabian@gmail.comﺑﻔﺮﺳﺘﻴﺪ. 9ﭘﺮوژﻩ را ﺑﺎﯾﺪ ﺧﻮدﺗﺎن اﻧﺠﺎم دهﻴﺪ ،ﺑﺎ ﺗﻘﻠﺐ ﺑﻪ ﺷﺪت ﺑﺮﺧﻮرد ﺧﻮاهﺪﺷﺪ. :ﻣﺮاﺟﻊ [1] Minijava Grammar, http://www.cambridge.org/us/features/052182060X/grammar.html [2] JLex Homepage, http://www.cs.princeton.edu/~appel/modern/java/JLex/ [3] CUP Homepage, http://www.cs.princeton.edu/~appel/modern/java/CUP/ [4] JTB Auto-generated Classes, http://compilers.cs.ucla.edu/jtb/jtb-2003/docs.html#auto
© Copyright 2025 Paperzz