CyfrifiaduronRhaglennu

Darlledwr - yw ... Mathau o crynoadyddion. Trosi a rhaglenni darlledu

Rhaglenni, yn ogystal â phobl i gyfieithu o un iaith i'r llall angen cyfieithydd neu gyfieithydd.

cysyniadau sylfaenol

Mae'r rhaglen yn gynrychiolaeth ieithyddol gyfrifiadau: i → P → P (i). Cyfieithydd yn rhaglen sy'n cael ei gyflenwi i'r rhaglen mewnbwn P a rhywfaint o fewnbwn x. Mae'n perfformio yn P x: I (P, x) = P (x). Mae'r ffaith nad oes ond un cyfieithydd yn gallu perfformio holl raglenni posibl (y gellir eu cynrychioli yn y system ffurfiol) yn Turing ddarganfyddiad dwys a sylweddol iawn.

Mae'r prosesydd yn cyfieithydd rhaglenni mewn iaith peiriant. Yn gyffredinol, yn rhy ddrud i ysgrifennu cyfieithwyr ar gyfer ieithoedd lefel uchel, fel eu bod yn cyfieithu i ffurf sy'n haws i'w ddehongli.

Mae rhai mathau o gyfieithwyr wedi enwau rhyfedd iawn:

  • Mae'r cyfosodwr yn cyfieithu rhaglenni iaith cynulliad i mewn iaith peiriant.
  • Mae'r compiler yn cyfieithu iaith lefel uchel i iaith is.

Darlledwr - yn rhaglen sy'n cymryd fel data mewnbwn i'r rhaglen mewn rhyw S iaith ac yn cynhyrchu rhaglen T yn y fath fodd bod gan y ddau yr un semanteg: P → X → C. Hynny yw, ∀x. P (x) = Q (x).

Os Darlledwyd y rhaglen gyfan yn rhywbeth ddehongli, mae'n cael ei alw'n casgliad cyn casglu gweithredu, neu AOT. Gellir TGB casglwr yn cael ei ddefnyddio yn y gyfres, yr olaf o'r rhain yn aml yn cyfosodwr, er enghraifft:

Mae'r cod ffynhonnell compiler → (cyfieithydd) → → cynulliad cod cyfosodwr (compiler) cod → → CPU peiriant (cyfieithydd).

casglu Gweithredol neu ddynamig yn digwydd os bydd y rhaglen yn cael ei darlledu, pan chyflawni gan ran arall a luniwyd yn flaenorol. JIT-crynoadyddion yn cofio yr hyn y maent eisoes wedi gwneud fel nad ydynt yn ailadrodd y cod ffynhonnell dro ar ôl tro. Gallant hyd yn oed yn cynhyrchu casglu addasol ac ail-grynhoi yn seiliedig ar ymddygiad yr amgylchedd gweithredu rhaglen.

Mae llawer o ieithoedd yn caniatáu i weithredu cod ar adeg crynhoi ac yn lunio'r cod newydd pan mae'n gweithredu.

cam cyfieithu

Darlledu yn cynnwys y camau dadansoddi a syntheseiddio:

Mae'r cod ffynhonnell dadansoddwr → → → generadur cynrychiolaeth cysyniadol (syntheseisydd) → cod Targed.

Mae hyn oherwydd y rhesymau hyn:

  • Nid yw unrhyw ddull arall yn addas. cyfieithu Word nid yn unig yn gweithio.
  • ateb peirianyddol da: os ydych chi am ysgrifennu cyfieithwyr ar gyfer ieithoedd ffynhonnell M a N targedu angen ysgrifennu'n unig M + N rhaglenni syml (polukompilyatorov) yn hytrach na M × N cymhleth (cyfanswm cyfieithwyr).

Fodd bynnag, yn ymarferol, golwg cysyniadol o iawn anaml ddigon mynegiannol a ddigon grymus i gynnwys pob ffynhonnell a tharged bosibl ieithoedd. Er bod rhai yn gallu dod yn agos at hyn.

crynoadyddion Real yn mynd trwy nifer o gamau. Nid yw Wrth greu eich hun compiler oes angen ailadrodd yr holl waith caled y mae pobl wedi ei wneud i greu cynrychioliadau a generaduron. Gallwch gyfieithu eich iaith yn uniongyrchol yn JavaScript neu C a manteisio ar eisoes yn bodoli JavaScript-engine ac at y C compiler i wneud y gweddill. Gallwch hefyd ddefnyddio'r gynrychiolaeth canolradd presennol a pheiriannau rhithwir.

cofnod cyfieithydd

Darlledwr - yn rhaglen neu galedwedd, a oedd yn cynnwys tair iaith: y ffynhonnell, y gyrchfan a'r sylfaen. Gellir eu hysgrifennu mewn T-siâp, gan osod y chwith gwreiddiol, dde a tharged sylfaen isod.

Mae tri math o crynoadyddion:

  • Darlledwr - yn samokompilyator os yw'n cyfateb i'r iaith ffynhonnell sylfaenol.
  • Cynullydd sy'n targedu iaith yn y llinell sylfaen, samorezidentnym enw.
  • Darlledwr - croes-casglwr, os yw ef targedu ac ieithoedd amrywiol sylfaenol.

Pam fod hyn yn bwysig?

Hyd yn oed os ydych chi byth yn gwneud compiler go iawn, wybodaeth dda am y dechnoleg ei greu, gan fod y cysyniad a ddefnyddir ar gyfer y diben hwn yn cael eu defnyddio yn eang, er enghraifft:

  • testun fformatio;
  • ymholiadau iaith i gronfeydd data;
  • pensaernïaeth cyfrifiadurol uwch;
  • problemau Optimization cyffredinol;
  • GUIs;
  • ieithoedd sgriptio;
  • rheolwyr;
  • peiriannau rhithwir;
  • cyfieithu peirianyddol.

Yn ogystal, os ydych am ysgrifennu preprocessors, linkers, llwythwyr, debuggers ac proffilwyr, rhaid i chi fynd trwy'r un camau ag wrth ysgrifennu casglwr.

Gallwch hefyd ddysgu sut i ysgrifennu rhaglenni yn well, gan fod y y cyfieithydd ar gyfer yr iaith creu yn golygu gwell dealltwriaeth o'i gymhlethdodau a amwysedd. Mae astudio egwyddorion cyffredinol ddarlledu hefyd yn eich galluogi i fod yn iaith dylunydd da. Felly mae'n ei ots pa mor serth yr iaith os na ellir ei roi ar waith yn effeithiol?

technoleg cynhwysfawr

technoleg compiler yn cwmpasu llawer o wahanol feysydd o wyddoniaeth gyfrifiadurol:

  • damcaniaeth ffurfiol iaith: gramadeg, dosrannu, Computability;
  • pensaernïaeth cyfrifiadur:. setiau cyfarwyddyd, RISC neu CISC, cylchoedd cloc prosesu craidd pipelined, ac ati;
  • cysyniadau o ieithoedd rhaglennu, er enghraifft, yn perfformio rheoli dilyniant, gweithredu amodol, iteriad, recursion, dadelfeniad swyddogaethol, modiwlau, synchronization, meta-rhaglennu, cwmpas, yn gyson is-math, templedi, math allbwn, prototeipiau, anodiadau, llif, monads, blychau post, yn parhau , wildcards, mynegiant rheolaidd, cof trafodion, etifeddiaeth, polymorphism, lleoliadau modd, ac yn y blaen ac yn y blaen..;
  • ieithoedd haniaethol a pheiriannau rhithwir;
  • algorithmau a data strwythurau: mynegiadau rheolaidd, dosrannu algorithmau, graffeg algorithmau, rhaglennu deinamig, hyfforddiant;
  • ieithoedd rhaglennu: cystrawen, semanteg (statig a deinamig), cymorth patrymau (strwythurol, OOP, swyddogaethol, rhesymegol, stac, parallelism, meta-rhaglennu);
  • meddalwedd creu (crynoadyddion, fel arfer yn fawr a chymhleth): leoleiddio, caching, componentize, API-rhyngwynebau, ailddefnyddio, synchronization.

dylunio compiler

Mae rhai o'r problemau a gafwyd wrth ddatblygu'r cyfieithydd go iawn:

  • Problemau gyda'r iaith wreiddiol. A yw'n hawdd i gasglu iddo? A oes Preprocessor? Sut mae'r mathau? A oes llyfrgell?
  • Grwpio tocynnau casglwr: sengl neu aml-ffordd?
  • Mae rhywfaint o optimization a ddymunir. Gall rhaglenni darlledu Cyflym a aflan gydag ychydig neu ddim optimization fod yn normal. Bydd dros-optimeiddio compiler araf, ond efallai y cod yn well pan mae'n gweithredu yn werth yr ymdrech.
  • Yr elfen angenrheidiol o ganfod camgymeriadau. A all cyfieithydd jyst stopio yn y gwall cyntaf? Pryd y dylid ei stopio? P'un ai i ymddiried yn y cywiriad gwall compiler?
  • Mae argaeledd offer. Os nad yn fach iawn yr iaith wreiddiol, mae'n ofynnol i'r sganiwr a generadur dadansoddwyr. Mae yna hefyd generaduron, generaduron cod, ond nid ydynt mor gyffredin.
  • Math o cod targed i gael ei gynhyrchu. Yn cael eu dewis o pur cod beiriant hategu neu rithwir. Neu dim ond ysgrifennu cyfran gofnod sy'n creu cynrychiolaeth canolradd poblogaidd fel LLVM, RTL, neu JVM. Neu wneud cyfieithiad o'r gwreiddiol yn y cod ffynhonnell yn C neu JavaScript.
  • Mae fformat y cod targed. Gallwch ddewis iaith cynulliad, cod beiriant symudol, delwedd peiriant cof cod.
  • Aildargedu. Pan fydd y gyfres o generaduron yn dda i gael cyfran fewnfa cyffredin. Am y rheswm hwn mae'n well i gael un generadur am fewnbwn sawl rhan.

Pensaernïaeth compiler: cydrannau

Y rhain yw'r prif elfennau swyddogaethol casglwr sy'n cynhyrchu cod brodorol (os yw'r rhaglen allbwn yn rhaglen yn C neu 'n weithredol beiriant, nid oes angen cymaint o gyfnodau):

  • Mae'r rhaglen mewnbwn (marciau llif) yn cael ei fwydo i mewn i'r sganiwr (analyzer geirfaol), sy'n trosi i mewn i ffrwd o docynnau.
  • Gramadegydd (parser) adeiladu un goeden cystrawen haniaethol.
  • analyzer Semantig pydru y wybodaeth semantig ac yn gwirio y nodau coed am wallau. O ganlyniad, adeiladwyd graff semantig - coeden cystrawen haniaethol gydag eiddo ychwanegol a'r cysylltiadau sefydledig.
  • generadur cod Canolradd yn adeiladu graff llif (tuples yn cael eu grwpio i mewn i brif flociau).
  • Peiriant-annibynnol optimizer cod cynnal yn lleol (o fewn yr uned sylfaenol) a byd-eang (i'r holl blociau) optimization bôn aros o fewn arferion. Lleihau cod diangen ac yn symleiddio'r cyfrifiadau. Y canlyniad yw graff llif haddasu.
  • Generator clymu cod targed blociau sylfaenol i mewn i god rheoli trosglwyddo unionlin, gan greu ffeil gwrthrych cyfosodwr cofrestri rhithwir (aneffeithiol o bosibl).
  • Peiriant-ddibynnol optimizer, linker yn dyrannu cof rhwng cyweiriau ac yn gwneud timau cynllunio. Mae'n perfformio rhaglen trosi mewn iaith cynulliad yn y gwasanaeth hwn gyda defnydd da o pipelining.

Yn ogystal, y defnydd o is-system rheolwr canfod gwall a thablau symbol.

Dadansoddiad Geirfaol (sganio)

Mae'r sganiwr yn trosi cymeriadau ffynhonnell ffrwd i mewn i nant o docynnau, cael gwared gofod gwyn, sylwadau a macros ehangu.

Sganwyr aml yn dod ar draws problemau, megis a ddylid ystyried yr achos, ymylon, toriadau llinell a sylwadau wreiddio.

Gwallau a all ddigwydd yn ystod sganio, a elwir geiriadurol ac yn cynnwys:

  • cymeriadau nad ydynt yn yr wyddor;
  • dros nifer o gymeriadau mewn gair neu linell;
  • Nid arwydd caeedig neu llinyn llythrennol;
  • diwedd y ffeil mewn sylwadau.

Dosrannu (dosrannu)

Mae'r gramadegydd yn trosi y dilyniant o docynnau i mewn i goeden cystrawen haniaethol. Mae pob nod yn y goeden yn cael ei storio fel gwrthrych gyda chaeau a enwyd, y mae llawer ohonynt eu hunain yn y nodau goeden. Ar y cam hwn nid oes unrhyw cylchoedd. Pan fyddwch yn creu parser yn angenrheidiol i roi sylw i lefel y cymhlethdod o ramadeg (LL neu'r chwith i'r dde) a darganfod a oes unrhyw reolau gwahaniaethu. oes angen dadansoddiad semantig rhai ieithoedd.

Gelwir Gwallau a geir ar hyn o bryd yn cael eu cystrawen. Er enghraifft:

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

dadansoddiad semantig

Yn ystod y dadansoddiad semantig i wirio a ganiateir rheolau a rhannau cyswllt y goeden dosrannu (gan ganiatáu enwau cyfeirio fewnosod gweithredu am addasiadau math ymhlyg, ac yn y blaen. D.) Ar gyfer ffurfio'r graff semantig.

Yn amlwg, y set o derbynioldeb o reolau mewn gwahanol ieithoedd gwahanol. Os byddwch yn lunio'r ieithoedd Java-fel, gall crynoadyddion ddod o hyd i:

  • datganiad amrywiol lluosog o fewn ei gwmpas;
  • mae cyfeiriad at newidyn cyn ei datganiad;
  • cyfeiriadau at enw'r heb ei ddatgan;
  • torri ar hawliau patent;
  • nifer gormodol neu annigonol o ddadleuon mewn galwad dull;
  • camgymhariad math.

genhedlaeth

cynhyrchu cod canolradd yn cynhyrchu graff llif cynnwys tuples, grwpio'n flociau sylfaenol.

cynhyrchu cod yn cynhyrchu cod peiriant go iawn. Mewn crynoadyddion traddodiadol ar gyfer y RISC-peiriannau ar y cam cyntaf, byddwch yn creu cyfosodwr gyda nifer anfeidrol o gofrestrau rhithwir. Ar gyfer CISC-peiriannau debyg na fydd yn digwydd.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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