ЭЭМ, Программалоо
Телеберүүнү - Компилятордун түрлөрү ... болуп саналат. Convert жана берүү программалары
Программалар, ошондой эле бир тилде башкасына которууга тилмечти же котормочу керек.
негизги түшүнүктөр
программа эсептер бир тилдик өкүлчүлүгү болуп саналат: мен P → P (I) →. Тилмеч P жана кээ бир киргизүү X киргизүү программасын берилген бир программа. Бул P X боюнча аткарат: I (P, х) = P (х). ошол чындык экенин бир гана котормочу (расмий системасында көрсөтүлүшү мүмкүн) мүмкүн болгон бардык программаларды аткарууга жөндөмдүү болгон өтө зор жана маанилүү ачылыш Тюринг болуп саналат.
Иштеп машина тилинде программаларды тилмеч болуп саналат. Жалпысынан алганда да, алар чечмелей кыйын абалга которуу үчүн, жогорку даражалуу тилдер үчүн тилмечтер жазып кымбат.
котормочулар кээ бир түрлөрү абдан кызыктуу аттары бар:
- чогултуучулар машина тилине тили программаларын которгон.
- Түзүүчү төмөнкү тил жогорку даражалуу тилин которгон.
Телеберүүнү - айрым тилдерде S-жылы программалык киргизүү маалыматтарды, программаны алып жана аларга бирдей эле SEMANTICS бар экенин T ушундай программа менен өндүрөт: P → X → С. болуп, ∀x. P (х) = Q (х).
interpretable нерсеге толугу менен уктурууларын болсо, анда аткаруу, же Аоста түзүүнүн алдында түзүү деп аталат. Аоста компилятор катар колдонулушу мүмкүн, мисалы, акыркы, көп чогултуучулар болуп саналат:
булак коду Түзүүчү → (котормочу) → → жамаат коду чогултуучулар (түзүүчүгө) → → CPU машина коду (котормочу).
Ыкчам же динамикалык түзүүнүн башка мурда түзүлгөн бөлүгүндө өлтүргөндөн кийин программа, уктуруулардын пайда болот. Алеки саатта-түзүүчүлөрдөн алар кайра-кайра баштапкы кодун кайталап болбош үчүн эмне кылганын эсте. Алар атүгүл программасын аткаруу чөйрөсүн кыймыл-аракетинин негизинде ийкемдүү түзүү жана recompilation өндүрө алат.
Көптөгөн тилдер компилештирүү учурда кодду ишке ашыруу жана иштөө учурунда жаңы кодун түзөт мүмкүнчүлүк берет.
которуу баскычы
Уктуруу анализдөө жана синтездеп, изи турат:
булак коду анализатор → → → маанилик өкүлчүлүктүү генератор (синтезатор) Максаттуу кодексинин →.
Бул себептерден улам болот:
- Кандайдыр бир башка ыкмасы ылайыктуу эмес. Word котормо жөн эле жардам бере бербейт.
- Жакшы инженердик чечим: сен М жана N булагы тилде максаттуу гана M + N жөнөкөй программа түзгөндү керек үчүн котормочуларга (polukompilyatorov), тескерисинче, M × N комплексинин караганда (котормочуларынын жалпы) жазып келсе.
Бирок, иш жүзүндө, жетиштүү өтө сейрек даана жетиштүү жана күчтүү ар кандай Түпнуска жана котормо тилдеринде жаап түшүнүк көрүнүшү. Кээ бир бул жакын келе албай жатып.
Реал түзүүчүлөрдөн көп баскычтардан өтөт. Өз түзүлүштөрдү түзүү адамдар сунуштаманы жана генератор түзүү үчүн кылган бардык күч-аракет кайталоонун кереги жок. Сиз JavaScript же С-түз тилинде которуп, учурдагы JavaScript-кыймылдаткыч жана эс алуу үчүн C Түзүүчүнүн кызматы менен колдоно алат. Ошондой эле учурдагы аралык өкүлчүлүктү жана колдоно аласыз жасалма машиналарды.
рекорд котормочу
булагы, бара турган жана базасы: - телеберүүнү үч тилде катышкан программанын же аппараттык болуп саналат. Алар төмөндөгү баштапкы сол, оң жана максаттуу базасын жайгаштыруу, Т-түрүндө жазылышы мүмкүн.
Компилятордун үч түрү бар:
- Телеберүүнү - бул негизги булагы тилинде туура келет, анда samokompilyator болуп саналат.
- тилге Compiler базалык, аталган samorezidentnym болуп саналат.
- Телеберүүнү - ал максаттуу болсо, жана негизги түрдүү тилдер кайчылаш-компилятор.
Бул эмне үчүн маанилүү?
Мисалы, бул максатта колдонулган түшүнүк, көп колдонулат, анткени чыныгы түзүлүштөрдү, аны түзүү технологиясы жакшы билген эч качан болсо да:
- туюнтма текст;
- тил суроолор маалымат базаларына;
- заманбап компьютер архитектурасы;
- жалпыланган оптималдаштыруу маселелери;
- GUIs;
- скрипт тили;
- жооптуу;
- жасалма машиналары;
- Машиналык которуу.
Мындан тышкары, Сиз preprocessors, linkers, жүктөөчү, debuggers жана profilers жазып келсе, компилятордун жазып жатканда, бир эле кадам катары аркылуу өтүүгө тийиш эле.
тилинин котормочу түзүү, анын татаал жана так эместиктер жакшыраак түшүнүүгө дегенди билдирет, анткени, сиз да, жакшы программаларды жазып кантип үйрөнө алабыз. берүүнүн жалпы изилдөө, ошондой эле жакшы дизайнер тили болуп берет. Демек, ал натыйжалуу жүзөгө ашырылышы мүмкүн эмес болсо, тилди кантип тик маанилүү?
комплекстүү технология
Түзүүчү технологиясы компьютер илимдин ар түрдүү багыттарын камтыйт:
- тилинин расмий теориясы: грамматика, талдоо, computability;
- компьютер архитектурасы. көрсөтмө топтому, RiSC же CISC, pipelined иштетүү негизги саат стадиялары, ж.б;
- Мисалы, бир катар көзөмөлдү жүзөгө ашыруучу, шарттуу аткаруу, кайталоо, рекурсиясыны, иш бузулуу, modularity, синхрондоштуруу, мета-программалоо, масштабы, тынымсыз суб-түрлөрү, шаблондор, чыгаруу түрү, прототиби, чечмелөө, агымы, микроскопсуз, .Тамганын үчүн программалоо тилдери, түшүнүктөрү улантат , Атайын, туруктуу сөз айкашы, мэмшелермен эс, мурас, Объеке режими орнотуулары, ж.б.у.с. ж.б..
- абстрактуу тилдер жана жасалма машиналар;
- алгоритмдер жана берилиштер структуралары: туруктуу сөз айкаштары, сүйлөм алгоритмдер, инкременттик алгоритми, динамикалык программалоо, окутуу;
- программалоо тилдери: синтаксис, семантика (статикалык жана динамикалык), колдоо парадигма (структуралык, OOP, антропология, логикалык, үймөк, параллелизм, мета-программалоо);
- түзүү программалык (түзүүчүлөрдөн, адатта, чоң жана татаал): чектөө, кештөө, componentize, API-кошки, кайрадан пайдаланууга, синхрондоштуруу.
Түзүүчү дизайн
реалдуу котормочунун өнүктүрүүдө кездешкен проблемаларды кээ бирлери:
- тилинен проблемасы. Аны түзүү үчүн кыйын эмеспи? бир preprocessor барбы? Кандай түрлөрү бар? китепкана барбы?
- Түзүүчү талондору бириктирүүчү: бир же көп жолу?
- оптималдаштыруу даражасы каалаган. аз же жок оптималдаштыруу менен тез жана таза берүү программалары нормалдуу болушу мүмкүн. Ашыкча оптималдаштыруу компилятор жай, бирок Runtime жакшы коду татыктуу болушу мүмкүн.
- ката аныктоо зарыл даражасы. котормочу биринчи күнөөсү боюнча токтоп алабы? аны токтотуу керек? Түзүүчү ката туура ишеним артууга болобу?
- куралдар бар. Түпнуска тили өтө аз эмес болсо, сканер жана генератордук талдагычтары талап кылынат. Ошондой эле, генераторлор, коду генератор бар, бирок алар жалпы эмес.
- максаттуу кодексинин түрү түзүлөт. таза толуктоолор же жасалма машинанын кодуна арасынан тандалып алынат. Же ушундай LLVM, багытын, же JVM катары таанымал аралык өкүлчүлүгүн жараткан кирүү бөлүгүн жаз. Же C же JavaScript булак кодексине түп котормосун берет.
- максаттуу кодексинин формат. Сиз тандай ала турган бир жамаат тилин, көчмө машина кодун, машина коду эс сүрөт.
- Кайра багыттоо. генераторлор белгиленген жалпы куйма үлүш жакшы болгондо. Ушул себептен көптөгөн бөлүктөрүн киргизүү үчүн бир генератор болгону жакшы болот.
Түзүүчү Архитектура: компоненттери
Бул эне кодду пайда Түзүүчүнүн негизги иш компоненттери (чыгаруу программасы C же жасалма аспапка программа болсо, мынчалык көп этаптарын кажети жок) болуп төмөнкүлөр саналат:
- Киргизүү программасы (агымы белгилери) Токендер агымы айлантып сканнер (лексикалык анализатор), труба.
- Parser (талдоочу) бир абстрактуу синтаксисин дарагын куруу.
- Semantic анализатор семантикалык маалыматтарды чирип жана күнөөлөрүбүз үчүн дарак бездеринин текшерет. кошумча касиеттери жана белгиленген байланыш менен абстрактуу синтаксисин дарагын - Натыйжада, семантикалык диаграммасын курду.
- Ара коду генератор агымы арыздын куруп (кортеждер негизги блоктордун топторго бөлүнөт).
- Machine-карандысыз коду оптимизатору жергиликтүү (базалык бөлүгүн чегинде) жана глобалдык (бардык бөлүктөрүнө чейин) оптималдаштыруу негизинен төрөлгөндөн ичинде калган да жүргүзөт. ашыкча коду азайтат жана эсептөөлөрдү анык. Натыйжада бир барак агым диаграммасы болуп саналат.
- Generator максаттуу бир чылымдын электр башкаруу кодексине коду негизги блокторду, обжек чогултуучулар жасалма тизмесин түзүү байлап (балким, натыйжасыз).
- Machine көз каранды оптимизатору, Азаттык машиналардын ортосундагы эс бөлүнөт жана пландаштыруу топторун түзөт. Бул pipelining жакшы пайдалануу менен бул жыйында ассемблер тилинде өзгөртүү программасын ишке ашырат.
Мындан тышкары, ката аныктоо системасын менеджери жана белгиси столдорду пайдалануу.
Лексикалык талдоо (сканер)
сканер, Токендерди бир нукка агым булагы белгилерди алып Whitespace айлантат, сын-пикирлер жана өнүктүрүү макросторду.
Сканерлер, адатта, ушундай ишти, чектерин, сызык төлөөдө жана камтылган комментарий же жокпу, алып эске сыяктуу кыйынчылыктарга туш.
сканерин учурунда келип чыгышы мүмкүн болгон каталар, лексикалык деп аталган жана төмөнкүлөрдү өзүнө камтыйт:
- тамгалары менен эмес, белги;
- бир сөз же ылайык каармандардын санынын өсүшү;
- жабык белгиси эмес, же кадимки сап;
- комментарий иштин аягы.
Бет (тарыхы)
талдоочу абстрактуу синтаксисин дарагына Токендерди ырааттуулугун айлантат. дарактын ар бир түйүн өздөрүнө дарак бездери көпчүлүк аталган тармактарда менен объектиси катары сакталат. Бул стадияда эч кандай стадиялары бар. Эгер талдоочу тил татаал даражасына маани берүү керек (LL же НПАга) жана кандайдыр бир эрежелер барак бар же жок экендигин билүү жаратууда. Кээ бир тилдерде семантикалык талдоо талап кылынат.
Бул этапта табылган каталар синтаксис деп аталат. Мисалы:
- к = 5 * (7 - ж;
- к = / 5;
- 56 = х + 4.
семантикалык анализ
Учурунда семантикалык талдоонун талдоо дарагын эрежелери жана досу бөлүктөрүнүн мубах текшерүү үчүн (толук түрү оодаруу үчүн ишин киргизүү шилтеме ат берип, жана башкалар. D.) семантикалык диаграммасын түзүү үчүн.
Албетте, ар кайсы тилде ар кандай эрежелер жол жыйындысы. Сиз Java-сыяктуу тилдерди түзөт, анда түзүүчүлөрдөн колдоно аласыз:
- Анын алкагында бир нече өзгөрмөнү жарыялоо;
- анын жарыялоо алдында өзгөрмөгө шилтеме;
- таймаш атынан шилтемелер;
- патенттик укуктарын бузуу жөнүндө;
- ыкмасы чалуу далилдер ашыкча же жетишсиз саны;
- түрү дал келбейт.
муун
Ара коду муун негизги блоктордун топтоштурулган агымы Tuples курамына диаграммасын өндүрөт.
коду муун чыныгы машина кодун өндүрөт. Биринчи кадам тууралуу RiSC-машиналарды салттуу Компилятордун, сиз жасалма тизмесине чексиз саны менен Assembler түзөт. CISC-машиналар үчүн болбой калышы дагы ыктымал.
Similar articles
Trending Now