ຄອມພິວເຕີດໍາເນີນໂຄງການ

ກະຈາຍສຽງ - ເປັນ ... ປະເພດຂອງ compilers. ແປງແລະບັນດາໂຄງການກະຈາຍ

ໂຄງການ, ເຊັ່ນດຽວກັນກັບປະຊາຊົນທີ່ຈະແປພາສາຈາກພາສາຫນຶ່ງໄປຍັງອີກຕ້ອງການລ່າມແປພາສາ.

ແນວຄິດພື້ນຖານ

ໂຄງການດັ່ງກ່າວແມ່ນເປັນຕົວແທນພາສາຂອງການຄິດໄລ່: ຂ້າພະເຈົ້າ→ P → P (i). ລ່າມແປພາສາເປັນໂຄງການທີ່ຖືກສະຫນອງໃຫ້ແກ່ໂຄງການການປ້ອນຂໍ້ມູນ P ແລະບາງວັດສະດຸປ້ອນ x ໄດ້. ມັນສະແດງຢູ່ດ້ານ P x: ຂ້າພະເຈົ້າ (P, x) = P (x). ຄວາມຈິງທີ່ວ່າມີພຽງແຕ່ຫນຶ່ງແປພາສາແມ່ນສາມາດປະຕິບັດບັນດາໂຄງການທີ່ເປັນໄປໄດ້ທັງຫມົດ (ຊຶ່ງສາມາດເປັນຕົວແທນໃນລະບົບຢ່າງເປັນທາງການ) ເປັນ profound ຫຼາຍແລະທີ່ສໍາຄັນ Turing ການຄົ້ນພົບ.

ໂຮງງານຜະລິດເປັນນາຍແປພາສາຂອງບັນດາໂຄງການໃນພາສາເຄື່ອງ. ໂດຍທົ່ວໄປມີລາຄາແພງເກີນໄປທີ່ຈະຂຽນນາຍພາສາສໍາລັບພາສາໃນລະດັບສູງ, ສະນັ້ນພວກເຂົາເຈົ້າແປເປັນຮູບແບບທີ່ງ່າຍຕໍ່ການຕີຄວາມຫມາຍ.

ບາງປະເພດຂອງຜູ້ແປພາສາມີຊື່ strange ຫຼາຍ:

  • ການປະກອບແປໂຄງການພາສາປະກອບເປັນພາສາເຄື່ອງ.
  • The compiler ແປພາສາໃນລະດັບສູງທີ່ຈະເປັນພາສາຕ່ໍາ.

ກະຈາຍສຽງ - ແມ່ນໂຄງການທີ່ໃຊ້ເວລາເປັນຂໍ້ມູນປ້ອນຂໍ້ມູນໂຄງການທີ່ເປັນພາສາບາງ S ແລະສາມາດຜະລິດໂຄງການ T ໃນລັກສະນະທີ່ພວກເຂົາເຈົ້າທັງສອງມີຄວາມຫມາຍດຽວກັນໄດ້: P → X → Q. ຫມາຍຄວາມວ່າ, ∀x. P (x) = Q (x).

ຖ້າຫາກວ່າການອອກອາກາດຂອງໂຄງການທັງຫມົດເຂົ້າໄປໃນບາງສິ່ງບາງຢ່າງຕີຄວາມຫມາຍໄດ້, ມັນຖືກເອີ້ນວ່າການລວບລວມກ່ອນການປະຕິບັດ, ຫຼື AOT ລວບລວມໄດ້. AOT compiler ສາມາດຖືກນໍາໃຊ້ໃນໄລຍະການ, ສຸດທ້າຍຂອງທີ່ມັກເປັນຜູ້ປະກອບການ, ສໍາລັບການຍົກຕົວຢ່າງ:

ແຫລ່ງລະຫັດ compiler → (ຜູ້ແປ) →→ປະກອບລະຫັດປະກອບ (compiler) ລະຫັດ→→ເຄື່ອງ CPU (ນາຍພາສາ).

ການປະຕິບັດຫຼືເຄື່ອນໄຫວລວບລວມເກີດຂຶ້ນຖ້າຫາກວ່າໂຄງການໄດ້ຖືກອອກອາກາດ, ໃນເວລາທີ່ປະຕິບັດໂດຍພາກສ່ວນທີ່ຖືກລວບລວມໃນເມື່ອກ່ອນອື່ນ. JIT-compilers ຈື່ສິ່ງທີ່ເຂົາເຈົ້າໄດ້ເຮັດມາແລ້ວດັ່ງນັ້ນເປັນທີ່ຈະບໍ່ເຮັດເລື້ມຄືນລະຫັດແຫຼ່ງອີກເທື່ອຫນຶ່ງແລະອີກເທື່ອຫນຶ່ງ. ພວກເຂົາເຈົ້າເຖິງແມ່ນວ່າສາມາດຜະລິດການລວບລວມດັດແປງງ່າຍແລະ recompilation ອີງໃສ່ພຶດຕິກໍາຂອງສະພາບແວດລ້ອມປະຕິບັດໂຄງການດັ່ງກ່າວ.

ພາສາຈໍານວນຫຼາຍອະນຸຍາດໃຫ້ປະຕິບັດລະຫັດທີ່ໃຊ້ເວລາລວບລວມແລະສັງລວມລະຫັດໃຫມ່ຢູ່ໃນອຸ.

ຂັ້ນຕອນຂອງການແປພາສາ

ອອກອາກາດຄັ້ງປະກອບດ້ວຍຂັ້ນຕອນຂອງການວິເຄາະແລະສັງເຄາະໄດ້:

ແຫລ່ງລະຫັດວິເຄາະ→→→ຈືຂໍ້ມູນການກໍາເນີດໄຟຟ້າເປັນຕົວແທນ (synthesizer) → code ເປົ້າຫມາຍ.

ນີ້ແມ່ນເນື່ອງມາຈາກເຫດຜົນດັ່ງກ່າວ:

  • ວິທີການອື່ນໆແມ່ນບໍ່ເຫມາະສົມ. ການແປພາສາຄໍາສັບພຽງແຕ່ບໍ່ໄດ້ເຮັດວຽກ.
  • ແກ້ໄຂວິສະວະກໍາທີ່ດີ: ຖ້າຫາກວ່າທ່ານຕ້ອງການທີ່ຈະຂຽນຜູ້ແປພາສາສໍາລັບພາສາ M ແລະ N ແຫຼ່ງເປົ້າຫມາຍຕ້ອງຂຽນເທົ່ານັ້ນບັນດາໂຄງການງ່າຍດາຍ M + N (polukompilyatorov) ແທນທີ່ຈະກ່ວາຜູ້ຊາຍ× N ສະລັບສັບຊ້ອນ (ທັງຫມົດຂອງຜູ້ແປພາສາ).

ຢ່າງໃດກໍຕາມ, ໃນຕົວຈິງ, ໄດ້ເບິ່ງຈືຂໍ້ມູນການຂອງຫຼາຍບໍ່ຄ່ອຍສະແດງອອກພຽງພໍແລະປະສິດທິພາບພຽງພໍທີ່ຈະກວມເອົາທຸກແຫຼ່ງແລະເປົ້າຫມາຍ conceivable ພາສາ. ໃນຂະນະທີ່ບາງຄົນສາມາດເຂົ້າມາໃກ້ກັບນີ້.

compilers ທີ່ແທ້ຈິງຜ່ານຫລາຍຂັ້ນຕອນ. ໃນເວລາທີ່ການສ້າງ compiler ຂອງທ່ານເອງບໍ່ໄດ້ຈໍາເປັນຕ້ອງໄດ້ກັບຄືນມາທັງຫມົດເຮັດວຽກຫນັກວ່າປະຊາຊົນໄດ້ເຮັດການສ້າງຕົວແທນແລະເຄື່ອງກໍາເນີດ. ທ່ານສາມາດແປພາສາພາສາຂອງທ່ານໂດຍກົງໃນ JavaScript ຫຼື C ແລະໃຊ້ເວລາປະໂຫຍດຂອງທີ່ມີຢູ່ແລ້ວ JavaScript ກໍາແລະ compiler C ໃນການເຮັດສ່ວນທີ່ເຫຼືອ. ນອກນັ້ນທ່ານຍັງສາມາດນໍາໃຊ້ເປັນຕົວແທນລະດັບປານກາງທີ່ມີຢູ່ແລ້ວແລະ ເຄື່ອງ virtual.

ບັນທຶກການແປພາສາ

ກະຈາຍສຽງ - ເປັນໂຄງການຫລືຮາດແວທີ່ກ່ຽວຂ້ອງສາມພາສາ: ແຫລ່ງທີ່ມາຂອງຈຸດຫມາຍປາຍທາງແລະພື້ນຖານ. ພວກເຂົາເຈົ້າສາມາດໄດ້ຮັບການລາຍລັກອັກສອນໃນ T-ຮູບຮ່າງ, ປົດປ່ອຍຊາດແລະຕົ້ນສະບັບຊ້າຍ, ຂວາແລະເປົ້າຫມາຍພື້ນຖານຕ່ໍາກວ່າ.

ມີສາມປະເພດຂອງ compilers ແມ່ນ:

  • ກະຈາຍສຽງ - ເປັນ samokompilyator ຖ້າຫາກວ່າມັນສອດຄ້ອງກັບພາສາແຫຼ່ງພື້ນຖານ.
  • Compiler ທີ່ພາສາເປົ້າຫມາຍເປັນພື້ນຖານ, ເອີ້ນວ່າ samorezidentnym.
  • ກະຈາຍສຽງ - ສອງຝັ່ງ, compiler, ຖ້າຫາກວ່າເຂົາເປົ້າຫມາຍແລະພາສາຕ່າງໆພື້ນຖານ.

ເປັນຫຍັງນີ້ເປັນສິ່ງສໍາຄັນ?

ເຖິງແມ່ນວ່າຖ້າຫາກວ່າທ່ານບໍ່ເຄີຍເຮັດໃຫ້ເປັນ compiler ທີ່ແທ້ຈິງ, ເປັນຄວາມຮູ້ທີ່ດີຂອງເຕັກໂນໂລຊີຂອງການສ້າງຂອງຕົນ, ເນື່ອງຈາກວ່າແນວຄວາມຄິດທີ່ຖືກນໍາໃຊ້ສໍາລັບຈຸດປະສົງນີ້ໄດ້ຖືກນໍາໃຊ້ຢ່າງກວ້າງຂວາງ, ສໍາລັບຕົວຢ່າງເຊັ່ນ:

  • ຂໍ້ຄວາມຮູບແບບ;
  • ສອບຖາມພາສາ ຖານຂໍ້ມູນ;
  • ສະຖາປັດຕະຄອມພິວເຕີແບບພິເສດ;
  • ບັນຫາທີ່ດີທີ່ສຸດທົ່ວໄປ;
  • GUIs;
  • ພາສາສະຄິບ;
  • ການຄວບຄຸມ;
  • ເຄື່ອງ virtual;
  • ການແປພາສາເຄື່ອງ.

ໃນນອກຈາກນັ້ນ, ຖ້າຫາກວ່າທ່ານຕ້ອງການທີ່ຈະຂຽນຕົວປະມວນຜົນ, Linkers, ລົດຕັກ, debuggers ແລະ profilers, ທ່ານຕ້ອງໄປໂດຍຜ່ານຂັ້ນຕອນການເຊັ່ນດຽວກັນກັບໃນເວລາທີ່ລາຍລັກອັກສອນ compiler ໄດ້.

ນອກນັ້ນທ່ານຍັງສາມາດຮຽນຮູ້ວິທີການຂຽນໂຄງການທີ່ດີກວ່າ, ນັບຕັ້ງແຕ່ການສ້າງຂອງການແປພາສາສໍາລັບພາສາໄດ້ຫມາຍຄວາມວ່າເປັນຄວາມເຂົ້າໃຈທີ່ດີກວ່າຂອງສະລັບສັບຊ້ອນແລະມີສອງນັຍຂອງຕົນ. ການສຶກສາຂອງບັນດາຫຼັກການທົ່ວໄປຂອງການກະຈາຍສຽງຍັງອະນຸຍາດໃຫ້ທ່ານສາມາດກາຍເປັນພາສາອອກແບບທີ່ດີ. ດັ່ງນັ້ນມັນບໍ່ສໍາຄັນແນວໃດ steep ພາສາຖ້າຫາກວ່າມັນບໍ່ສາມາດໄດ້ຮັບການປະຕິບັດສິດທິພາບ?

ເຕັກໂນໂລຊີທີ່ສົມບູນແບບ

ເຕັກໂນໂລຊີ compiler ການປົກຫຸ້ມຂອງພື້ນທີ່ທີ່ແຕກຕ່າງກັນຈໍານວນຫຼາຍຂອງວິທະຍາສາດຄອມພິວເຕີ:

  • ທິດສະດີຢ່າງເປັນທາງການຂອງພາສາ: ໄວຍະກອນ, ວະຈີວິພາກ, computer
  • ສະຖາປັດຕະຄອມພິວເຕີ:. ຄໍາແນະນໍາຊຸດ, RISC ຫຼື CISC ທໍ່ປະມວນຜົນຫຼັກຮອບໂມງ, ແລະອື່ນໆ;
  • ແນວຄວາມຄິດຂອງພາສາການຂຽນໂປຣແກຣມ, ສໍາລັບການຍົກຕົວຢ່າງ, ປະຕິບັດການຄວບຄຸມລໍາດັບການດໍາເນີນການຕາມເງື່ອນໄຂ, iteration, recursion, decomposition ທີ່ເປັນປະໂຫຍດ, modularity, synchronization, ດໍາເນີນທຸດໍາເນີນໂຄງການ, ຂອບເຂດ, ຄົງຍ່ອຍປະເພດ, ແມ່ແບບ, ປະເພດຜົນຜະລິດ, prototypes, ຄໍາ, ການໄຫຼ, Monad, mailboxes, ດໍາເນີນການຕໍ່ , ສັນລັກຕົວແທນສະແດງອອກເປັນປົກກະຕິ, ຄວາມຊົງຈໍາເຮັດທຸລະກໍາ, ມໍລະດົກ, polymorphism, ການປັບຄ່າຮູບແບບ, ແລະອື່ນໆແລະອື່ນໆ..
  • ພາສາບໍ່ມີຕົວຕົນແລະເຄື່ອງ virtual;
  • ສູດການຄິດໄລ່ແລະ ຂໍ້ມູນໂຄງສ້າງ: ສໍານວນປົກກະຕິຂັ້ນຕອນວິທີການແຍກວິເຄາະຂັ້ນຕອນວິທີຟິກ, ການຂຽນໂປຣແກຣມແບບເຄື່ອນໄຫວ, ການຝຶກອົບຮົມ;
  • ພາສາການຂຽນໂປຣແກຣມ: syntax ຄວາມຫມາຍ (static ແລະເຄື່ອນໄຫວ), ຂະບວນທັດສະຫນັບສະຫນູນ (ໂຄງສ້າງ, OOP, ທີ່ເປັນປະໂຫຍດ, ມີເຫດຜົນ, stack, ຂະຫນານ, ດໍາເນີນທຸດໍາເນີນໂຄງການ);
  • ຊອຟແວການສ້າງ (compilers, ປົກກະຕິແລ້ວຂະຫນາດໃຫຍ່ແລະສະລັບສັບຊ້ອນ): ທ້ອງຖິ່ນ, ຈາກຖານຄວາມຈໍາ, componentize, API, ການໂຕ້ຕອບ, ໃຫ້ການນໍາໃຊ້, synchronization.

ການອອກແບບລວບລວມ

ບາງສ່ວນຂອງບັນຫາຕ່າງໆທີ່ພົບໃນການພັດທະນາຂອງການແປພາສາທີ່ແທ້ຈິງ:

  • ບັນຫາກ່ຽວກັບພາສາຕົ້ນທາງ. ມັນເປັນເລື່ອງງ່າຍທີ່ຈະສັງລວມມັນ? ມີຕົວປະມວນຜົນ? ມີວິທີການປະເພດແນວໃດ? ມີຫ້ອງສະຫມຸດ?
  • ການຈັດກຸ່ມຜ່ານ compiler: ດຽວຫຼືຫຼາຍວິທີການ?
  • ລະດັບຂອງການທີ່ດີທີ່ສຸດທີ່ຕ້ອງການ. ບັນດາໂຄງການກະຈາຍໄວແລະບໍ່ສະອາດມີທີ່ດີທີ່ສຸດພຽງເລັກນ້ອຍຫຼືບໍ່ມີສາມາດຈະປົກກະຕິ. compiler ໃນໄລຍະທີ່ດີທີ່ສຸດຈະຊ້າ, ແຕ່ລະຫັດທີ່ດີກວ່າຢູ່ໃນອຸອາດຈະຕົກເປັນມູນຄ່າມັນ.
  • ໄດ້ປະລິນຍາທີ່ກໍານົດໄວ້ຂອງການຊອກຄົ້ນຫາຄວາມຜິດພາດ. ສາມາດແປພາສາເປັນພຽງແຕ່ຢຸດຢູ່ໃນຄວາມຜິດພາດຄັ້ງທໍາອິດ? ໃນເວລາທີ່ມັນຄວນຈະຢຸດເຊົາການ? ບໍ່ວ່າຈະໄວ້ວາງໃຈການແກ້ໄຂຄວາມຜິດພາດການລວບລວມແນວໃດ?
  • ການວາງຈໍາຫນ່າຍເຄື່ອງມື. ຖ້າຫາກວ່າພາສາຕົ້ນສະບັບແມ່ນບໍ່ຂະຫນາດນ້ອຍຫຼາຍ, ສະແກນເນີແລະໂດຍທົ່ວໄປວິເຄາະຖືກຕ້ອງ. ກໍຍັງມີເຄື່ອງປັ່ນໄຟ, ເຄື່ອງກໍາເນີດລະຫັດ, ແຕ່ພວກເຂົາເຈົ້າແມ່ນບໍ່ຄືກັນ.
  • ປະເພດຂອງລະຫັດເປົ້າຫມາຍທີ່ຈະໄດ້ຮັບການສ້າງຂຶ້ນ. ໄດ້ຮັບການຄັດເລືອກຈາກລະຫັດເຄື່ອງບໍລິສຸດອາຫານເສີມຫຼື virtual. ຫຼືພຽງແຕ່ຂຽນເປັນບາງສ່ວນເຂົ້າທີ່ສ້າງເປັນຕົວແທນລະດັບປານກາງທີ່ນິຍົມເຊັ່ນ LLVM, RTL ຫລື JVM. ຫຼືເຮັດໃຫ້ການແປພາສາຂອງຕົ້ນສະບັບເປັນໃນລະຫັດແຫຼ່ງໃນ C ຫຼື Javascript.
  • ຮູບແບບຂອງຂໍ້ກໍານົດເປົ້າຫມາຍດັ່ງກ່າວ. ທ່ານສາມາດເລືອກທີ່ຈະ ເປັນພາສາປະກອບ, ລະຫັດເຄື່ອງ Portable, ຮູບພາບຄວາມຊົງຈໍາລະຫັດເຄື່ອງ.
  • Retargeting. ໃນເວລາທີ່ກໍານົດໄວ້ຂອງເຄື່ອງກໍາເນີດແມ່ນດີທີ່ຈະມີບາງສ່ວນ inlet ທົ່ວໄປ. ສໍາລັບເຫດຜົນນີ້ມັນເປັນທີ່ດີທີ່ສຸດທີ່ຈະມີຫນຶ່ງໂດຍທົ່ວໄປສໍາລັບວັດສະດຸປ້ອນຂອງຫຼາຍພາກສ່ວນ.

compiler ຖາປັດຕະຍະ: ອົງປະກອບ

ເຫຼົ່ານີ້ແມ່ນອົງປະກອບທີ່ເປັນປະໂຫຍດທີ່ສໍາຄັນຂອງ compiler ທີ່ສ້າງລະຫັດ native (ຖ້າຫາກວ່າໂຄງການຜົນຜະລິດແມ່ນໂຄງການໃນ C ຫຼືເຄື່ອງ virtual, ທ່ານຈໍາເປັນຕ້ອງບໍ່ຫລາຍຂັ້ນຕອນນັ້ນ) ເປັນ:

  • ໂຄງການວັດສະດຸປ້ອນ (ເຄື່ອງຫມາຍການໄຫຼ) ໄດ້ຖືກປ້ອນເຂົ້າໄປໃນການສະແກນ (ວິເຄາະສັບ), ເຊິ່ງ converts ມັນເຂົ້າໄປໃນນ້ໍາຂອງ tokens ໄດ້.
  • Parser (parser) ສ້າງຫນຶ່ງຕົ້ນໄມ້ syntax ບໍ່ມີຕົວຕົນ.
  • ການວິເຄາະ Semantic decomposes ຂໍ້ມູນ semantic ແລະກວດສອບຂໍ້ຕົ້ນໄມ້ສໍາລັບຄວາມຜິດພາດ. ດັ່ງນັ້ນ, ການກໍ່ສ້າງເສັ້ນສະແດງການ semantic - ຕົ້ນໄມ້ syntax ຕົວຕົນທີ່ມີຄຸນສົມບັດເພີ່ມເຕີມແລະການເຊື່ອມໂຍງການສ້າງຕັ້ງຂຶ້ນ.
  • ໂດຍທົ່ວໄປລະຫັດລະດັບປານກາງສ້າງເສັ້ນສະແດງການໄຫຼ (Tuples ຖືກຈັດກຸ່ມເປັນບລັອກຕົ້ນຕໍ).
  • ເຄື່ອງ, ເອກະລາດດີທີ່ສຸດລະຫັດດໍາເນີນການທັງສອງທ້ອງຖິ່ນ (ພາຍໃນຫນ່ວຍພື້ນຖານ) ແລະທົ່ວໂລກ (ກັບຕັນທັງຫມົດ) ທີ່ດີທີ່ສຸດໂດຍພື້ນຖານແລ້ວຍັງເຫຼືອຢູ່ພາຍໃນປະຕິບັດ. ການຫຼຸດຜ່ອນລະຫັດຊ້ໍາຊ້ອນແລະລົດຄວາມຍຸ່ງຍາກການຄິດໄລ່ໄດ້. ຜົນໄດ້ຮັບແມ່ນເປັນເສັ້ນສະແດງການໄຫຼດັດແກ້.
  • ໂດຍທົ່ວໄປບັງຄັບລະຫັດເປົ້າຫມາຍບລັອກພື້ນຖານເຂົ້າໄປໃນລະຫັດການຄວບຄຸມລະບົບສາຍສົ່ງ rectilinear, ການສ້າງໄຟລ໌ວັດຖຸປະກອບທີ່ຈົດທະບຽນ virtual (ອາດບໍ່ໄດ້ຜົນ).
  • ເຄື່ອງຂຶ້ນ optimizer, linker ແບ່ງຄວາມຊົງຈໍາລະຫວ່າງການລົງທະບຽນແລະດໍາເນີນການວາງແຜນທີມ. ຈະດໍາເນີນການໂຄງການປ່ຽນໃຈເຫລື້ອມໃສໃນພາສາປະກອບຢູ່ໃນສະພາແຫ່ງນີ້ມີການນໍາໃຊ້ທີ່ດີຂອງທໍ່.

ໃນນອກຈາກນັ້ນ, ການນໍາໃຊ້ຂອງການຄຸ້ມຄອງລະບົບຍ່ອຍການຊອກຄົ້ນຫາຄວາມຜິດພາດແລະຕາຕະລາງສັນຍາລັກ.

ການວິເຄາະ Lexical (ສະແກນ)

ສະແກນເນີແປງຕົວອັກສອນແຫຼ່ງນ້ໍາເຂົ້າໄປໃນນ້ໍາຂອງ tokens, ຖອນຊ່ອງຫວ່າງ, ຄວາມຄິດເຫັນແລະມະຫາພາກຂະຫຍາຍໄດ້.

ສະແກນເນີມັກຈະພົບບັນຫາເຊັ່ນ: ບໍ່ວ່າຈະເປັນຫຼືບໍ່ທີ່ຈະໃຊ້ເວລາເຂົ້າໄປໃນບັນຊີຂອງກໍລະນີທີ່, ຂອບເຂດ, ຂຶ້ນບັນທັດແລະຄວາມຄິດເຫັນຝັງ.

ຄວາມຜິດພາດທີ່ອາດເກີດຂຶ້ນໃນລະຫວ່າງການສະແກນເອີ້ນວ່າ lexical ແລະປະກອບມີ:

  • ຕົວອັກສອນທີ່ບໍ່ໄດ້ຢູ່ໃນຫນັງສືໄດ້;
  • ການເກີນຂອງຈໍານວນຂອງຕົວອັກສອນໃນຄໍາສັບຫຼືເສັ້ນ;
  • ບໍ່ແມ່ນອາການປິດຫລືສະຕິງທີ່ຮູ້ຫນັງສື;
  • ໃນຕອນທ້າຍຂອງເອກະສານໃນຄວາມຄິດເຫັນ.

ແຍກ (ວະຈີວິພາກ)

ຕົວແຍກວິເຄາະແປງລໍາດັບຂອງ tokens ການເຂົ້າໄປໃນຕົ້ນໄມ້ syntax ບໍ່ມີຕົວຕົນ. node ຢູ່ໃນລໍາຕົ້ນແຕ່ລະຄົນແມ່ນເກັບຮັກສາໄວ້ເປັນວັດຖຸທີ່ມີທົ່ງນາທີ່ມີຊື່, ຈໍານວນຫຼາຍຊຶ່ງໃນນັ້ນແມ່ນຕົນເອງຂໍ້ຕົ້ນໄມ້ເປັນ. ໃນຂັ້ນຕອນນີ້ບໍ່ມີຮອບວຽນ. ໃນເວລາທີ່ທ່ານສ້າງ parser ແມ່ນມີຄວາມຈໍາເປັນທີ່ຈະຈ່າຍເອົາໃຈໃສ່ກັບລະດັບຂອງຄວາມສັບສົນຂອງໄວຢາກອນ (LL ຫຼື LR) ແລະຊອກຫາບໍ່ວ່າຈະມີທຸກ disambiguation ກົດລະບຽບ. ບາງພາສາທີ່ຮຽກຮ້ອງໃຫ້ມີການວິເຄາະ semantic.

ຄວາມຜິດພາດທີ່ພົບເຫັນຢູ່ໃນຂັ້ນຕອນນີ້ແມ່ນເອີ້ນວ່າໄວຍາກອນ. ສໍາລັບຕົວຢ່າງເຊັ່ນ:

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

ການວິເຄາະຄວາມຫມາຍ

ໃນລະຫວ່າງການ ວິເຄາະ semantic ການກວດສອບການອະນຸຍາດຂອງກົດລະບຽບແລະພາກສ່ວນບໍລິສັດຮ່ວມຂອງຕົ້ນໄມ້ parse ໄດ້ (ໃຫ້ຊື່ກະສານອ້າງອີງໃສ່ປະຕິບັດງານສໍາລັບການສົນທະນາປະເພດໄນແລະອື່ນໆ. D) ສໍາລັບກອບເປັນຈໍານວນຂອງກາຟ semantic.

ທ້າວ Xiao ເວົ້າວ່າ, ທີ່ກໍານົດໄວ້ຂອງຍອມຮັບຂອງກົດລະບຽບໃນພາສາທີ່ແຕກຕ່າງກັນທີ່ແຕກຕ່າງກັນໄດ້. ຖ້າຫາກວ່າທ່ານສັງລວມພາສາ Java, ຄື, compilers ອາດຈະພົບ:

  • ປະກາດຕົວແປທີ່ຫຼາກຫຼາຍພາຍໃນຂອບເຂດຂອງຕົນ;
  • ກະສານອ້າງອີງເພື່ອເປັນຕົວປ່ຽນແປງກ່ອນທີ່ຈະປະກາດຂອງຕົນ;
  • ເອກະສານກັບຊື່ຂອງບໍ່ໄດ້ປະກາດໄດ້;
  • ການລະເມີດສິດທິສິດທິບັດ;
  • ຈໍານວນຫຼາຍເກີນໄປຫຼືບໍ່ພຽງພໍຂອງການໂຕ້ຖຽງໃນການໂທວິທີການ;
  • ປະເພດບໍ່ກົງກັນ.

ການຜະລິດ

ການຜະລິດລະຫັດລະດັບປານກາງສາມາດຜະລິດເສັ້ນສະແດງການໄຫຼປະກອບດ້ວຍ Tuples, ຈັດກຸ່ມເປັນບລັອກພື້ນຖານ.

ການຜະລິດລະຫັດຜະລິດລະຫັດເຄື່ອງທີ່ແທ້ຈິງ. ໃນ compilers ດັ້ງເດີມສໍາລັບ RISC, ເຄື່ອງໃນຂັ້ນຕອນທໍາອິດ, ທ່ານສ້າງຜູ້ປະກອບກັບຈໍານວນນິດຂອງການລົງທະບຽນ virtual. ສໍາລັບ CISC, ເຄື່ອງອາດຈະບໍ່ເກີດຂຶ້ນ.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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