ኮምፒውተሮችፕሮግራም

የስርጭቱ - ... compilers አይነቶች ነው. ቀይር እና ስርጭት ፕሮግራሞች

ፕሮግራሞችን, እንዲሁም ሰዎች አስተርጓሚ ወይም ተርጓሚ ያስፈልጋቸዋል ከአንድ ቋንቋ ወደ ሌላ ለመተርጎም.

መሰረታዊ ፅንሰ

ፕሮግራሙ ስሌቶች የሆነ የቋንቋ የሚወክል ነው: i P → P (i) →. አንድ አስተርጓሚ የግቤት ፕሮግራም P እና አንዳንድ ግቤት x የሚቀርቡ ነው ይህም አንድ ፕሮግራም ነው. ይህ P x ላይ እንደሚሰራ: እኔ (P, x) = P (x). ብቻ አንድ ተርጓሚ (መደበኛ ሥርዓት ውስጥ ሊቀመጡ ይችላሉ ይህም) ሁሉ በተቻለ ፕሮግራሞች በማከናወን ችሎታ መኖሩን እውነታ እጅግ ጥልቅ እና ትርጉም ግኝት Turing ነው.

የ አንጎለ ማሽን ቋንቋ ፕሮግራሞች አስተርጓሚ ነው. እነርሱ መተርጎም ቀላል ነው ቅጽ ወደ ተርጉም ስለዚህ, ከፍተኛ-ደረጃ ቋንቋዎች አስተርጓሚዎችን ለመጻፍ በአጠቃላይ በጣም ውድ.

ተርጓሚዎች አንዳንድ ዓይነት በጣም እንግዳ ስሞች አሉዎት:

  • የ ገጣጣሚ ማሽን ቋንቋ ወደ ስብሰባ ቋንቋ ፕሮግራሞች ይተረጉመዋል.
  • የ አጠናቃሪ ዝቅ ቋንቋ ወደ ከፍተኛ-ደረጃ ቋንቋ የተተረጎመ ነው.

ነው ይህ P → X → ጥ, ∀x: - አሰራጭ ሁለቱም ተመሳሳይ የቃላት ትርጉም እንዳላቸው እንዲህ ያለ መንገድ T ፕሮግራም በአንዳንድ ቋንቋ S ውስጥ የግቤት ውሂብ እንደ ፕሮግራሙ የሚወስደው እና የሚያፈራ የሆነ ፕሮግራም ነው. P (x) = ጥ (x).

interpretable ነገር ወደ መላው ፕሮግራም ማሰራጨት ከሆነ, የሞት, ወይም AOT ማጠናቀር በፊት የያዙ ይባላል. AOT አጠናቃሪ ተከታታይ ላይ ሊውል ይችላል, ይህም በኋለኛው ብዙውን ለምሳሌ ያህል ገጣጣሚ ነው:

ምንጭ ኮድ አጠናቃሪ → (ተርጓሚ) → → ስብሰባ ኮድ ገጣጣሚ (አጠናቃሪ) → → የሲፒዩ ማሽን ኮድ (አስተርጓሚ).

ሌሎች ከዚህ ቀደም የተጠናከረ ክፍል ተገድሏል ጊዜ ፕሮግራም ስርጭት ከሆነ ተጠናቀው ወይም ተለዋዋጭ ማጠናቀር የሚከሰተው. JIT-compilers እንደገና እና እንደገና ምንጭ ኮድ መድገም ሳይሆን እንደ ስለዚህ እነርሱ አስቀድመው ምን እንዳደረጉ አስታውስ. እነሱ እንኳን የፕሮግራሙ አፈጻጸም አካባቢ ባህሪ ላይ የተመሠረተ የመላመድ ማጠናቀር እና recompilation ማፍራት ይችላሉ.

በብዙ ቋንቋዎች ማጠናቀር ጊዜ ኮድን ይፈፅማል እና የሚፈጀውን ላይ አዲስ ኮድ ለማጠናቀር ያስችላቸዋል.

የትርጉም ደረጃ

የስርጭት በመተንተን እንዲሁም synthesizing ያለውን ደረጃዎች ይይዛል;

የዒላማ ኮድ → ምንጭ ኮድ analyzer → → → ጽንሰ ውክልና ጄኔሬተር (አጥላይ).

ይህ በእነዚህ ምክንያቶች የተነሳ ነው:

  • ማንኛውም ሌላ ዘዴ ተስማሚ አይደለም. ቃል ትርጉም በቀላሉ አይሰራም.
  • ጥሩ ምህንድስና መፍትሔ: እናንተ ይልቁንም መ × N ውስብስብ ይልቅ ብቻ M + N ቀላል ፕሮግራሞች (polukompilyatorov) መጻፍ ያስፈልገዋል ዒላማ M እና N ምንጭ ቋንቋዎች ተርጓሚዎች (ተርጓሚዎች ጠቅላላ) ለመጻፍ ከፈለጉ.

ሆኖም ግን, በተግባር, አንድ በቂ በጣም እምብዛም የምትገልጽ እንዲሁም በቂ ኃይለኛ የሆነ ጽንሰ ሃሳባዊ አመለካከት አልዘረዘረም የመነሻ እና የመድረሻ ቋንቋዎች ለመሸፈን. አንዳንዶች ይህ ቅርብ መምጣት ችለዋል ቢሆንም.

እውነተኛ compilers ብዙ ደረጃዎች ማለፍ. የራስዎን አጠናቃሪ ለመፍጠር ጊዜ ሰዎች ውክልና እና ማመንጫዎች ለመፍጠር ጊዜ ስላደረጉት ነገር ሁሉ ከባድ ሥራ መድገም አያስፈልገውም. JavaScript ን ወይም ሲ ውስጥ በቀጥታ በእርስዎ ቋንቋ መተርጎም እና ነባር የ JavaScript-ሞተር እና የተቀረውን ለማድረግ C አጠናቃሪ ተጠቃሚ ሊወስድ ይችላል. በተጨማሪም አሁን በመካከለኛ ውክልና እና መጠቀም ይችላሉ ምናባዊ ማሽኖች.

መዝገብ ተርጓሚ

ምንጭ, መድረሻው እና ቤዝ: - አሰራጭ በሦስት ቋንቋዎች ይጨምራል አንድ ፕሮግራም ወይም ሃርድዌር ነው. እነዚህ ከታች የመጀመሪያው ግራ, ቀኝ እና ኢላማ መሠረት ሲደረግ, የ T-ቅርጽ የተጻፈ ይቻላል.

compilers በሦስት አይነቶች አሉ:

  • የስርጭቱ - ይህ መሠረታዊ ምንጭ ቋንቋ ጋር አብሮ የሚሄድ ከሆነ samokompilyator ነው.
  • ቋንቋ ዒላማ ይህም አጠናቃሪ ወደ ከመነሻው, ይባላል samorezidentnym ነው.
  • የስርጭቱ - በመስቀል-አጠናቃሪ, እሱ ዒላማ ከሆነ እና መሠረታዊ የተለያዩ ቋንቋዎች.

ይህ አስፈላጊ የሆነው ለምንድን ነው?

እንኳን ለዚህ ዓላማ የሚውለው ጽንሰ-ለምሳሌ, በስፋት ጥቅም ላይ ናቸው; ምክንያቱም እናንተ, እውነተኛ አጠናቃሪ, በውስጡ የፍጥረት የቴክኖሎጂ ጥሩ እውቀት ለማድረግ ፈጽሞ ከሆነ:

  • የቅርጸት ጽሁፍ;
  • ቋንቋ መጠይቆች ጎታዎች ጋር;
  • የላቁ ኮምፒውተር አርክቴክቸር;
  • አጠቃላይ የማመቻቸት ችግሮች;
  • GUIs;
  • ስክሪፕት ቋንቋዎች:
  • መቆጣጠሪያዎች;
  • ምናባዊ ማሽን;
  • የማሽን ትርጉም.

እናንተ preprocessors, linkers, ሎድሮች, debuggers እና profilers መጻፍ ከፈለጉ በተጨማሪ, አንድ አጠናቃሪ በመጻፍ ጊዜ ተመሳሳይ ደረጃዎች ማለፍ አለበት.

በተጨማሪም ቋንቋ ለማግኘት ተርጓሚ ፍጥረት የራሱ የሚራባበት እና ambiguities የተሻለ ግንዛቤ ማለት በመሆኑ, የተሻለ ፕሮግራሞች መጻፍ እንደሚቻል መማር እንችላለን. ስርጭትን አጠቃላይ መርሆዎች ጥናት ደግሞ ጥሩ ንድፍ ቋንቋ ለመሆን ያስችላቸዋል. ስለዚህ እንዴት ተጣደፉና ይህ ሁኔታ ተግባራዊ ሊሆን አይችልም ከሆነ ቋንቋ ለውጥ ነው?

ሁለገብ ቴክኖሎጂ

አጠናቃሪ ቴክኖሎጂ የኮምፒውተር ሳይንስ ብዙ የተለያዩ ቦታዎች ይሸፍናል:

  • ቋንቋ መደበኛ ንድፈ: ሰዋስው, የመተንተን, computability;
  • ኮምፒውተር አርክቴክቸር:. መመሪያ ስብስቦች, RISC ወይም CISC, pipelined ሂደት ኮር የሰዓት ዑደቶች, ወዘተ;
  • የፕሮግራም ቋንቋዎች ጽንሰ, ለምሳሌ, አንድ ተከታታይ ቁጥጥር, ሁኔታዊ የሞት, ተደጋጋሚነት, recursion, ተግባራዊ ውህድ, modularity, ማመሳሰል, ሜታ-ፕሮግራም, ወሰን, የማያቋርጥ ንዑስ-አይነቶች, አብነቶችን, ውጽዓት አይነት, ተምሳሌት, ማብራሪያዎች, ፍሰት, monads, ሳጥኖችን በማከናወን, ቀጥል , ልቅ ምልክቶች, መደበኛ አገላለጽ, በጣም ላይ ወዘተ ዝውውር ትውስታ, ውርስ, polymorphism, ሁነታ ቅንብሮች, እና..;
  • ረቂቅ ቋንቋዎች እና ምናባዊ ማሽኖች;
  • ስልተ እና የውሂብ መዋቅሮች: መደበኛ መግለጫዎች, መተንተን ስልተ, ግራፊክስ ስልተ, ተለዋዋጭ ፕሮግራም, ስልጠና;
  • የፕሮግራም ቋንቋዎች: አገባብ, (የማይንቀሳቀስ እና ተለዋዋጭ) ትርጉሞቹ, ድጋፍ paradigms (መዋቅራዊ, OOP, ተግባራዊ, ምክንያታዊ, ቁልል, ከሚለው ሜታ-ፕሮግራም);
  • ፍጥረት ሶፍትዌር (, አብዛኛውን ጊዜ ትላልቅ እና ውስብስብ compilers): ለትርጉም, መሸጎጥ, componentize, ኤ ፒ አይ-በይነ, ዳግም ለመጠቀም, ማመሳሰል.

አጠናቃሪ ንድፍ

እውነተኛ ተርጓሚው መካከል ልማት ውስጥ አጋጥሞታል ችግሮች መካከል አንዳንዶቹ:

  • ምንጭ ቋንቋ ጋር ችግሮች አሉ. በእርሷ ማጠናቀር ቀላል ነውን? አንድ preprocessor አለ? እንዴት አይነቶች ናቸው? ቤተ መጽሐፍት ነው?
  • አጠናቃሪ passes ማቧደን: ነጠላ ወይም ባለብዙ መንገድ?
  • ማመቻቸት ያለውን ደረጃ የተፈለገውን. ጥቂት ወይም ምንም ማመቻቸት ጋር ፈጣን እና ርኩስ ስርጭት ፕሮግራሞች የተለመደ ሊሆን ይችላል. በላይ-የትባት አጠናቃሪ ቃሉ አይዘገይም, ነገር ግን የሚፈጀውን ጊዜ ላይ የተሻለ ኮድ ይህ ዋጋ ሊሆን ይችላል.
  • ስህተት የመመርመሪያ የሚፈለገው ደረጃ. አንድ ተርጓሚ ብቻ የመጀመሪያው ስህተት ላይ ማቆም የምችለው እንዴት ነው? ማቆም ያለብን መቼ ነው? የ አጠናቃሪ ስህተት እርማት መታመን ይሁን?
  • መሣሪያዎች መገኘት. የመጀመሪያውን ቋንቋ በጣም ትንሽ አይደለም ከሆነ, ስካነር እና ጄኔሬተር analyzers ያስፈልጋሉ. አሉ ማመንጫዎች, ኮድ ማመንጫዎች ደግሞ ናቸው, ነገር ግን እነርሱ በጣም የተለመዱ አይደሉም.
  • ዒላማ ኮድ አይነት ሊፈጠር ዘንድ. ንጹሕ በደጋፊነት ወይም ምናባዊ ማሽን ኮድ ከ መመረጥ. ወይም ደግሞ ልክ እንደ LLVM, RTL, ወይም JVM እንደ አንድ ታዋቂ በመካከለኛ ውክልና የሚፈጥር መሆኑን ምዝግብ ክፍል ይጻፉ. ወይም C ወይም ጃቫስክሪፕት ውስጥ ምንጭ ኮድ ውስጥ የመጀመሪያው አንድ ትርጉም ማድረግ.
  • የዒላማ ኮድ ቅርጸት. እርስዎ መምረጥ ይችላሉ አንድ ትልቅ ስብሰባ ቋንቋ, አንድ ተንቀሳቃሽ ማሽን ኮድ, የማሽን ኮድ ትውስታ ምስል.
  • Retargeting. ማመንጫዎች ስብስብ ጥሩ ጊዜ አንድ የጋራ መፍሰሻ ድርሻ እንዲኖራቸው. በዚህ ምክንያት ብዙ ክፍሎች መካከል ያለውን ግብዓት የሚሆን አንድ ጄኔሬተር እንዲኖረው ማድረግ የተሻለ ነው.

አጠናቃሪ አርክቴክቸር: ክፍሎች

እነዚህ (የውጽአት ፕሮግራም C ወይም ምናባዊ ማሽን ውስጥ ያለ ፕሮግራም ነው ከሆነ: እናንተ ግን በጣም ብዙ ደረጃዎች ያስፈልጋቸዋል) ቤተኛ ኮድ የሚያመነጭ አንድ አጠናቃሪ ዋና ተግባራዊ ክፍሎች ናቸው:

  • የግቤት ፕሮግራም (ፍሰት ምልክቶች) ወረቀትን መካከል ወደ ዥረት; ይቀይራል ያለውን ስካነር (ቃላዊ analyzer), ወደ መመገብ ነው.
  • አንድ ረቂቅ አገባብ ዛፍ ግንባታ ተንታኝ (ተንታኝ).
  • የፍቺ analyzer ያለውን የፍቺ መረጃ ቢበሰብስም እና ስህተቶች ዛፉ እባጮች በማጣራት ላይ ነው. ተጨማሪ ንብረቶችን እና የተቋቋመ አገናኞች ጋር ረቂቅ የአገባብ ዛፍ - በዚህም ምክንያት, የፍቺ ግራፍ ሠራ.
  • በመካከለኛ ኮድ ጄኔሬተር (tuples ዋና ብሎኮች ውስጥ ነው የሚመደቡት) አንድ ፍሰት ግራፍ ይገነባል.
  • ማሽን-ነጻ ኮድ አመቻች በመሠረቱ ተዕለት ውስጥ የቀረው (ምናምንቴ ዩኒት ውስጥ) አካባቢያዊ እና አለምአቀፍ (በሁሉም ብሎኮች ላይ) ማመቻቸት ሁለቱንም ያካሂዳል. ከመጠን ያለፈ ኮድ ይቀንሳል እና ስሌቶች ሳንጨነቅ. ውጤቱ የተሻሻለው ፍሰት ግራፍ ነው.
  • ጄኔሬተር (ምናልባትም ውጤታማ) አንድ የነገር ፋይል ገጣጣሚ ምናባዊ የመመዝገብ መፍጠር, አንድ rectilinear ማስተላለፊያ መቆጣጠሪያ ኮድ ወደ ዒላማ ኮድ መሠረታዊ ያግዳል ያስራል.
  • ማሽን-ጥገኛ ማበልጸጊያ, linker የመመዝገብ መካከል ትውስታ የሚያከፋፍለውን እና እቅድ ቡድኖች ያደርጋል. ይህ pipelining ጥሩ አጠቃቀም ጋር በዚህ ስብሰባ ላይ ስብሰባ ቋንቋ ልወጣ ፕሮግራም ያከናውናል.

በተጨማሪም, ስህተት ማወቂያ subsystem አስተዳዳሪ እና ምልክት ጠረጴዛዎች መጠቀም.

ቃላዊ ትንተና (ቅኝት)

የ ስካነር ወረቀትን, በማስወገድ አርጌ, አስተያየቶች እና በማስፋፋት የማክሮዎች አንድ ዥረት ወደ ዥረት ምንጭ ቁምፊዎች ይቀይራል.

ቃኚዎች ብዙውን ጊዜ እንዲህ መለያ ወደ ጉዳዩ, ጠርዞች, መስመር እረፍት እና የተካተቱ አስተያየቶች ለመውሰድ ወይም አይደለም ችግሮች ያጋጥሟቸዋል.

ቅኝት ወቅት ሊከሰት ይችላል ስህተቶች, ቃላዊ ይባላል እና ያካትታሉ:

  • በ ፊደል ውስጥ ያልሆኑ ቁምፊዎች;
  • አንድ ቃል ወይም መስመር ውስጥ የቁምፊዎች ብዛት በላይ;
  • አይደለም በተዘጋ ምልክት ወይም በቃል ሕብረቁምፊ;
  • አስተያየት ውስጥ ፋይል መጨረሻ.

መተንተን (የማወራረድ)

የ ተንታኝ አንድ ረቂቅ የአገባብ ዛፍ ወደ ወረቀትን ያለውን ቅደም ተከተል ትለውጣለች. ዛፉ ውስጥ እያንዳንዱ መስቀለኛ መንገድ ራሳቸውን ዛፉ እባጮች ናቸው ሲሆን ከእነዚህ መካከል ብዙዎቹ የሚባል መስኮች, አንድ ነገር ሆኖ የተቀመጠን ነው. በዚህ ደረጃ ላይ ምንም ዑደቶች አሉ. እርስዎ ለመፍጠር ጊዜ አንድ ተንታኝ ሰዋሰው (ll ወይም LR) ውስብስብነት ደረጃ ትኩረት መስጠት እና ማንኛውም ደንቦች disambiguation አሉ እንደሆነ ማወቅ አስፈላጊ ነው. በአንዳንድ ቋንቋዎች የፍቺ ትንተና ትጠይቃላችሁ.

በዚህ ደረጃ ላይ ስህተቶች ተገኝተዋል አገባብ ይባላሉ. ለምሳሌ ያህል:

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

የፍቺ ትንታኔ

የ ወቅት የፍቺ ትንተና ወደ ትንተና ዛፍ ደንቦች እና ተባባሪ ክፍሎች መካከል permissibility ለማረጋገጥ (ስውር አይነት ልወጣዎች ክወና ሲከት ማጣቀሻ ስሞች በመፍቀድ, እና በጣም ላይ. መ) የ የፍቺ ግራፍ በማቋቋም ለ.

ግልጽ, በተለያዩ በተለያዩ ቋንቋዎች ደንቦች ተቀባይነት ስብስብ. እርስዎ የ Java-እንደ ቋንቋዎች ማጠናቀር ከሆነ, compilers ማግኘት ይችላሉ:

  • በውስጡ ወሰን ውስጥ በርካታ ተለዋዋጭ መግለጫ;
  • በውስጡ መግለጫ በፊት አንድ ተለዋዋጭ ማጣቀሻ;
  • ወደ undeclared ስም ዋቢዎችን;
  • የፓተንት መብት ጥሰት;
  • ዘዴ ጥሪ ውስጥ እሴቶች ከመጠን ያለፈ ወይም በቂ ቁጥር;
  • ዓይነት አለመዛመድ.

ትዉልድ

በመካከለኛ ኮድ ትውልድ መሠረታዊ ብሎኮች ውስጥ ተመድበው tuples ያቀፈ ፍሰት ግራፍ, ይፈጥራል.

ኮድ ትውልድ እውነተኛ ማሽን ኮድ ይፈጥራል. የመጀመሪያው ደረጃ ላይ RISC-ማሽኖች ለ ባህላዊ compilers ውስጥ, እናንተ ምናባዊ የመመዝገብ አንድ የሌለው ቁጥር ጋር አንድ ገጣጣሚ መፍጠር. CISC-ማሽኖች ለማግኘት ምናልባት መከሰት ይሆናል.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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