ՀամակարգիչներԾրագրավորում

Հեռարձակողի - ն ... տեսակները compilers: Նորադարձ եւ հեռարձակել

Ծրագրեր, ինչպես նաեւ, որ մարդիկ թարգմանել մեկ լեզվից մյուսը պետք է բանավոր կամ գրավոր թարգմանիչ:

հիմնական հասկացությունները

Ծրագիրը լեզվաբանական ներկայացուցչություն հաշվարկներով i → P → P (i): Թարգմանիչ է մի ծրագիր, որը մատակարարվում է մուտքագրման ծրագրի P եւ որոշ մուտքագրման x: Այն կատարում է P x I (P, x) = P (x): Այն փաստը, որ կա միայն մեկ թարգմանիչ ի վիճակի է բոլոր հնարավոր ծրագրերը (որը կարող է ներկայացված լինել ֆորմալ համակարգում), շատ խորն է եւ կարեւոր հայտնագործություն Turing:

Պրոցեսոր է թարգմանիչն ծրագրերի մեքենա լեզվով. Ընդհանուր առմամբ, շատ թանկ է գրել interpreters բարձր մակարդակի լեզուներով, այնպես որ նրանք թարգմանել մի ձեւով, որը ավելի հեշտ է մեկնաբանել:

Որոշ տեսակի թարգմանիչների ունեն շատ տարօրինակ անուններ:

  • The Assembler թարգմանում հավաքների լեզվով հաղորդումներ մեջ մեքենա լեզվով:
  • Կազմողի թարգմանում է բարձր մակարդակի լեզու է ցածր լեզվով.

Հեռարձակողի - մի ծրագիր, որը տեւում է որպես մուտքային տվյալներ ծրագիրը ինչ-որ լեզվի S եւ արտադրում T ծրագիր այնպես, որ նրանք երկուսն էլ ունեն նույն իմաստաբանություն: P → X → Հ այսինքն, ∀x: P (x) = Q (x):

Եթե հեռարձակել ամբողջ ծրագիրը մեջ ինչ-որ բան interpretable, այն կոչվում է կազմելու առջեւ կատարումը, կամ AoT կազմելու. AOT Կազմողի կարող է օգտագործվել շարքի, վերջինս, որը հաճախ Assembler, օրինակ `

Աղբյուրը կոդը Կազմողի → (թարգմանիչ) → → ժողովը կոդը Assembler (Կազմողի) → → CPU մեքենա կոդը (թարգմանիչ):

Գործառնական կամ դինամիկ առաջ տեղի է ունենում, եթե հեռարձակվում, երբ կատարվում է այլ նախապես կազմված մաս: JIT-կազմողները հիշել, թե ինչ են նրանք արդեն արել այնպես, ինչպես չեն կրկնել ելակետային կոդը կրկին ու կրկին. Նրանք կարող են նույնիսկ արտադրել հարմարվողական կազմելու եւ recompilation հիման վրա վարքագծի ծրագիրը կատարման միջավայրում:

Շատ լեզուներ թույլ են տալիս կատարել կոդ կազմում ժամանակ եւ կուտակել է նոր օրենսգիրքը է Runtime:

թարգմանություն փուլ

Broadcast կազմում քայլերը վերլուծելու եւ համադրելու:

Աղբյուրը կոդը անալիզատոր → → → հայեցակարգային ներկայացուցչություն գեներատոր (սինթեզատոր) → նպատակային կոդը:

Սա պայմանավորված է այդ պատճառներով:

  • Ցանկացած այլ մեթոդը հարմար չէ: Բառի թարգմանությունը պարզապես չի աշխատում:
  • Լավ ճարտարագիտական լուծում, եթե դուք ուզում եք գրել թարգմանիչների M եւ N կոդով լեզուներով նպատակային կարիք գրել միայն M + n պարզ ծրագրեր (polukompilyatorov), այլ ոչ թե մ × N համալիրի (ընդհանուր թարգմանիչների):

Սակայն, գործնականում, հայեցակարգային տեսարան շատ հազվադեպ արտահայտիչ չեն եւ հզոր բավարար է ծածկելու բոլոր հնարավոր աղբյուր եւ նպատակային լեզուներով. Մինչ ոմանք կարողացան գալ մոտ է սա.

Անշարժ կազմողները անցնել բազմաթիվ փուլերում: Երբ ստեղծել ձեր սեփական Կազմողի չի պետք է կրկնել բոլոր ծանր աշխատանքը, որ ժողովուրդը արել են ստեղծել ներկայացուցչություններ եւ գեներատորներ: Դուք կարող եք թարգմանել ձեր լեզուն ուղղակիորեն JavaScript- ը կամ C եւ օգտվելով առկա JavaScript շարժիչով եւ C Կազմողի է անել մնացածը. Դուք կարող եք նաեւ օգտագործել գոյություն ունեցող միջանկյալ ներկայացուցչություն եւ վիրտուալ մեքենաներ.

ռեկորդային թարգմանիչ

Հեռարձակողի - մի ծրագիր կամ ապարատային, որը ներգրավված է երեք լեզուներով `աղբյուրի, նշանակման վայրում եւ բազային. Նրանք կարող են լինել գրվել է T-վիճակում, դնելով բնօրինակը ձախ, աջ եւ թիրախային բազա ստորեւ.

Գոյություն ունեն երեք տեսակի compilers:

  • Հեռարձակողի - Սա samokompilyator, եթե այն համապատասխանում է հիմնական աղբյուր լեզվով.
  • Կազմողի որը թիրախը լեզուն է բազային, որը կոչվում samorezidentnym.
  • Հեռարձակողի - խաչաձեւ կոմպիլյատոր, եթե նա նպատակային եւ հիմնարար տարբեր լեզուներով:

Ինչու է սա կարեւոր:

Նույնիսկ եթե դուք երբեք կատարել իրական Կազմողի, լավ գիտելիքներ տեխնոլոգիայի ստեղծման, քանի որ հայեցակարգը, որն օգտագործվում է այդ նպատակի համար օգտագործվում են լայնորեն, օրինակ `

  • ֆորմատավորում տեքստը.
  • լեզվական հարցումներ տվյալների բազաների,
  • զարգացած համակարգչային ճարտարապետություն
  • ընդհանրացված օպտիմալացման խնդիրները.
  • GUIs;
  • scripting լեզուներով;
  • Կարգավորիչներ;
  • վիրտուալ մեքենաներ.
  • Մեքենա թարգմանություն.

Բացի այդ, եթե դուք ուզում եք գրել preprocessors, linkers, բեռնող debuggers եւ Profilers, դուք պետք է գնալ միջոցով նույն քայլերի են, երբ գրել Կազմողի.

Դուք նաեւ կարող եք իմանալ, թե ինչպես պետք է գրել ավելի լավ ծրագրեր, քանի որ ստեղծում է թարգմանչի համար լեզվով նշանակում է ավելի լավ հասկանալ իր intricacies եւ երկիմաստություններ. Ուսումնասիրությունը ընդհանուր սկզբունքների հեռարձակման նաեւ թույլ է տալիս Ձեզ է դառնալ լավ դիզայներ լեզու: Այնպես որ, դա, թե ինչպես է ուղղաձիգ է լեզուն, եթե այն չի կարող իրականացվել արդյունավետ.

համապարփակ տեխնոլոգիա

Կազմողի տեխնոլոգիան ընդգրկում է տարբեր ոլորտներ համակարգչային գիտության:

  • ձեւական տեսությունը լեզվով: քերականության, վերլուծել, computability.
  • Համակարգչային ճարտարապետության ուսուցման հավաքածուներ, RISC կամ CISC, Կոնվեյերային մշակման հիմնական շուրջօրյա ցիկլեր, եւ այլն;
  • հասկացությունները ծրագրավորման լեզուների, օրինակ, կատարում է հերթական վերահսկողություն, պայմանական կատարման, բազմակրկնություն, ռեկուրսիա, ֆունկցիոնալ կազմալուծում, Մոդուլային, համաժամացման, մետա-ծրագրավորում, շրջանակը, մշտական ենթագոտիներ, կաղապարներ, արտադրանքի տեսակը, նախատիպերի, անոտացիաներ, հոսքի, monads, փոստարկղերը, շարունակել , խմբային նիշերը կապող, կանոնավոր արտահայտություն, գործառնական հիշողության, ժառանգութիւնը, polymorphism ռեժիմների, եւ այլն: եւ այլն:;
  • վերացական լեզուներ եւ վիրտուալ մեքենաներ.
  • ալգորիթմեր եւ տվյալների կառուցվածքներ: կանոնավոր արտահայտություններ, վերլուծման ալգորիթմներ, գրաֆիկա ալգորիթմներ, դինամիկ ծրագրավորում, ուսուցում;
  • ծրագրավորման լեզուներ: շարահյուսություն, իմաստաբանություն (ստատիկ եւ դինամիկ), օժանդակ պարադիգմերը (կառուցվածքային, OOP, ֆունկցիոնալ, տրամաբանական, բուրգ, parallelism, մետա-ծրագրավորում).
  • ստեղծումը, ծրագրագրաշարեր (կազմողները, սովորաբար մեծ եւ բարդ): localization, caching, componentize, API, ինտերֆեյս, կրկին օգտագործման, համաժամացման.

Կազմողի դիզայն

Որոշ խնդիրների առաջացած զարգացման գործում իրական թարգմանչի:

  • Problems with աղբյուր լեզվով: Արդյոք դա հեշտ է կազմել այն. Կա մի preprocessor. Ինչպես են տեսակները. Կա գրադարան է:
  • Խմբավորման Կազմողի անցնում: Մեկ կամ բազմաբնակարան ճանապարհ.
  • Աստիճանը օպտիմալացման ցանկալի: Արագ եւ անմաքուր հեռարձակվող ծրագրերը քիչ կամ ոչ օպտիմալացման կարող է լինել նորմալ: Over-օպտիմալացում կոմպիլյատոր կլինի դանդաղ, բայց ավելի լավ է կոդը ժամը Runtime կարող է արժանի այն.
  • Պահանջվող աստիճանը սխալի հայտնաբերման. Կարող է մի թարգմանիչ պարզապես կանգ առաջին սխալի. Երբ այն պետք է դադարեցնի: Անկախ նրանից, թե պետք է վստահել Կազմողի սխալների ուղղումը:
  • Առկայությունը գործիքներ. Եթե բնօրինակը լեզուն չէ, շատ փոքր է, սկաների եւ գեներատոր անալիզատորներ են պահանջվում: Կան նաեւ գեներատորներ, կոդը գեներատորներ, սակայն դրանք այնքան էլ տարածված.
  • Տեսակը թիրախային կոդի գեներացվել է: Է ընտրել մաքուր լրացվել կամ վիրտուալ մեքենա օրենսգրքի: Կամ պարզապես գրել մուտքի մասը, որը ստեղծում է համաժողովրդական միջանկյալ ներկայացուցչություն, ինչպիսիք են LLVM, RTL, կամ JVM: Կամ կատարել թարգմանությունը բնօրինակը աղբյուրի օրենսգրքի C կամ JavaScript:
  • Այդ ձեւաչափը թիրախային օրենսգրքի: Դուք կարող եք ընտրել Ասամբլեա լեզուն, շարժական մեքենա կոդը, մեքենա կոդը հիշողությունը պատկերը.
  • Retargeting: Երբ փաթեթը գեներատորների լավ է ունենալ մի ընդհանուր խորշիկ մասը: Այս պատճառով է, որ լավ է ունենալ մեկ գեներատոր մուտքային բազմաթիվ մասերի.

Կազմողի Ճարտարապետություն: բաղադրիչներ

Սրանք են այն հիմնական ֆունկցիոնալ բաղադրիչները Կազմողի, որը առաջացնում է հայրենի կոդը (եթե արտադրանքը ծրագիրը մի ծրագիր C կամ վիրտուալ մեքենա, դուք պետք է ոչ այնքան շատ փուլերը):

  • Մուտքային Ծրագիրը (հոսքի նշանները), որը սնվում է սկաների (բառային անալիզատոր), որը նորադարձների այն հոսքի տառ:
  • Parser (parser) կառուցման մեկ աբստրակտ syntax ծառ:
  • Իմաստաբանական անալիզատոր քայքայվում է իմաստային տեղեկություններ եւ ստուգում է ծառի հանգույցների համար սխալներով. Որպես հետեւանք, որը կառուցվել իմաստային գծագիր - աբստրակտ syntax ծառը լրացուցիչ հատկություններով եւ սահմանված հղումներ.
  • Միջանկյալ կոդը գեներատոր կառուցում ծախսի գրաֆիկը (tuples խմբավորված են հիմնական բլոկների):
  • Մեքենա-անկախ կոդը լավարկիչ անցկացնում, այնպես էլ տեղական (շրջանակներում բազային միավորի) եւ գլոբալ (բոլոր բլոկների) օպտիմալացման հիմնականում մնացած ներսում routines. Նվազեցնում պահուստային կոդը եւ պարզեցնում են հաշվարկներ: Արդյունքն ակնառու է, մի փոփոխվել հոսքեր գրաֆիկի:
  • Generator կապում թիրախ կոդ հիմնական նյութից մեջ Էվկլիդյան փոխանցման վերահսկողության կոդը, ստեղծելով օբյեկտ ֆայլի Assembler վիրտուալ գրանցամատյաններ (հնարավոր է անարդյունավետ):
  • Մեքենայաընթեռնելի կախված լավարկիչ, Linker հատկացնում հիշողությունը միջեւ ռեգիստրների եւ կազմում պատրաստվում թիմեր: Այն իրականացնում է փոխակերպման ծրագիրը ժողովում լեզվի այս ժողովին մի լավ օգտագործման pipelining:

Բացի այդ, օգտագործումը սխալ հայտնաբերման ենթահամակարգի կառավարչի եւ խորհրդանիշ սեղաններ:

Բառային վերլուծություն (սկանավորում)

Սկաներ նորադարձների հոսքի աղբյուրի կերպարներ են հոսքի տառ, հեռացնելով սպիտակ, մեկնաբանությունների եւ ընդլայնելու մակրո.

Սկաներներ հաճախ բախվում խնդիրների, ինչպիսիք են, թե արդյոք պետք է հաշվի առնել, որ գործը, margins, տող ընդմիջումները եւ ներդրված մեկնաբանությունները:

Սխալներ, որոնք կարող են առաջանալ ընթացքում սկան, որը կոչվում է բառային եւ ներառում են `

  • կերպարները, որոնք չեն այբուբենի.
  • ավելցուկային թվի նիշերի մի բառի կամ գծի.
  • ոչ մի փակ նշան կամ լարային բառացի.
  • վերջը ֆայլը մեկնաբանության:

Վերլուծել (abuse log)

The parser նորադարձների հաջորդականությունը տառ մեջ վերացական ձեւաչափումով ծառից. Յուրաքանչյուր հանգույց է ծառից պահվում է որպես օբյեկտի հետ անունով ոլորտներում, որոնցից շատերը իրենց ծառ հանգույցների. Այս փուլում չկան ցիկլեր. Երբ եք ստեղծել մի parser անհրաժեշտ է ուշադրություն դարձնել մակարդակի բարդության քերականության (LL կամ LR), եւ պարզել, թե արդյոք կան կանոններ Տարբերման: Որոշ լեզուներ պահանջում իմաստային վերլուծություն:

Սխալներ այս փուլում կոչվում են շարահյուսական: Օրինակ `

  • k = 5 * (7 - y;
  • J = / 5;
  • 56 = x * 4.

իմաստաբանական վերլուծություն

Ընթացքում իմաստային վերլուծության ստուգելու թույլատրելիությունը կանոնների եւ ասոցիացված մասերում վերլուծել ծառի (որը թույլ է տալիս տեղեկատուներ անուններ Տեղադրելու գործողություն անուղղակի տիպի conversions, եւ այլն: D.) ձեւավորման իմաստային գրաֆիկը:

Ակնհայտ է, որ փաթեթը ընդունելիության կանոնների տարբեր լեզուներով տարբեր. Եթե դուք համադրում Java նման լեզուները, կազմողները կարող եք գտնել:

  • բազմակի փոփոխական հռչակագիրը դրա կիրառման շրջանակների.
  • հղում է փոփոխական առաջ իր հայտարարությունից.
  • հղումները Հանուն չհայտարարված.
  • խախտումը արտոնագրային իրավունքների;
  • չափից ավելի կամ անբավարար թվով փաստարկներ մեթոդը զանգի.
  • տեսակը անհամապատասխանություն:

սերունդ

Միջանկյալ կոդը սերունդ հոսքեր գրաֆիկի բաղկացած է tuples, խմբավորված հիմնական նյութից:

կոդը սերունդ արտադրում իրական մեքենա կոդը: Ավանդական կոմպիլյատորների համար RISC-մեքենաների վրա առաջին քայլ, դուք ստեղծել մի ասեմբլեր հետ անսահման թվով վիրտուալ ռեգիստրների. Համար CISC մեքենաների հավանաբար տեղի չի ունենա:

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hy.delachieve.com. Theme powered by WordPress.