මගේම ක්‍රමලේඛන භාෂාවක් සහ ඒ සඳහා සම්පාදකයෙකු නිර්මාණය කරන්නේ කෙසේද [සංවෘත]


427

මම ක්‍රමලේඛනය පිළිබඳ මනා දැනුමක් ඇති අතර BASIC, FORTRAN, COBOL, LISP, LOGO, Java, C ++, C, MATLAB, ගණිතමය, පයිතන්, රූබි, පර්ල්, ජාවාස්ක්‍රිප්ට්, එකලස් සහ වෙනත් භාෂා හරහා පැමිණ සිටිමි. මිනිසුන් ක්‍රමලේඛන භාෂා නිර්මාණය කරන්නේ කෙසේද සහ ඒ සඳහා සම්පාදකයින් නිර්මාණය කරන්නේ කෙසේදැයි මට තේරුම් ගත නොහැක. මිනිසුන් වින්ඩෝස්, මැක්, යුනික්ස්, ඩොස් වැනි මෙහෙයුම් පද්ධති නිර්මාණය කරන්නේ කෙසේදැයි මට තේරුම් ගත නොහැකි විය. මට අභිරහස් වන අනෙක් කාරණය නම් මිනිසුන් OpenGL, OpenCL, OpenCV, Cocoa, MFC වැනි පුස්තකාල නිර්මාණය කරන ආකාරයයි. මට තේරුම් ගැනීමට නොහැකි වූ අවසාන දෙය නම් විද්‍යා scientists යන් එකලස් කිරීමේ භාෂාවක් සහ මයික්‍රොප්‍රොසෙසරයක් සඳහා එකලස් කරන්නෙකු නිර්මාණය කරන්නේ කෙසේද යන්නයි. මම මේ සියල්ල ඉගෙන ගැනීමට කැමතියි. මගේ වයස අවුරුදු 15 කි. මට නිතරම අවශ්‍ය වූයේ බබාගේ, ටියුරින්, ෂැනන් හෝ ඩෙනිස් රිචී වැනි පරිගණක විද්‍යා ist යෙකු වීමටයි.


මම දැනටමත් Aho's Compiler Design සහ Tanenbaum හි OS සංකල්ප පොත කියවා ඇති අතර ඒවා සියල්ලම සාකච්ඡා කරන්නේ සංකල්ප සහ කේත ඉහළ මට්ටමක පමණි. ඔවුන් විස්තර හා සූක්ෂ්මතාවයන් සහ සම්පාදක හෝ මෙහෙයුම් පද්ධතියක් සකස් කරන්නේ කෙසේද යන්න සොයා නොගනී. මට අවශ්‍ය වන්නේ සංයුක්ත අවබෝධයක් වන අතර එමඟින් මට තනිවම නිර්මාණය කළ හැකි අතර නූල්, සෙමෆෝර්, ක්‍රියාවලිය හෝ විග්‍රහ කිරීම යනු කුමක්ද යන්න පිළිබඳ අවබෝධයක් පමණක් නොවේ. මම මගේ සහෝදරයාගෙන් මේ සියල්ල ගැන විමසුවෙමි. ඔහු එම්අයිටී හි ඊඊසීඑස් හි එස්බී ශිෂ්‍යයෙක් වන අතර සැබෑ ලෝකයේ මේ සියල්ල සැබවින්ම නිර්මාණය කරන්නේ කෙසේද යන්න පිළිබඳ හෝඩුවාවක් ඔහුට ලැබී නැත. ඔහු දන්නා සියල්ල ඔබ සඳහන් කළ (එනම් නූල්, සමමුහුර්තකරණය, සමගාමී, මතක කළමනාකරණය, ශබ්දකෝෂ විශ්ලේෂණය, අතරමැදි කේත උත්පාදනය වැනි) සම්පාදක සැලසුම් සහ මෙහෙයුම් පද්ධති පිළිබඳ අවබෝධයක් පමණි.


ඔබ Unix / ලිනක්ස් මත නම්, ඔබ කැප මෙවලම් පිළිබඳ තොරතුරු ලබා ගත හැක: lex, yaccසහ bison.
mouviciel

මගේ පළමු යෝජනාව වනුයේ අහෝ විසින් රචිත ඩ්‍රැගන් පොත කියවීමයි. amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/…
ජූලියන්

1
සමහර විට එතරම් ප්‍රයෝජනවත් නොවනු ඇත, නමුත් මම නිර්දේශ කරන්නේ sites.google.com/site/steveyegge2/blog-rants (ස්ටීව් යෙග්ගේ බ්ලොගය) සහ steve-yegge.blogspot.com/ (ස්ටීව් යෙග්ගේ අනෙක් බ්ලොග් අඩවිය) හරහා යන්න.
කේ.කේ.

3
ඔබට හැකි තරම් ක්‍රමලේඛන භාෂා ඉගෙන ගන්න. එමඟින් ඔවුන්ගේ සංකල්පවලින් මෙන්ම ඔවුන්ගේ වැරදිවලින්ද ඔබ ඉගෙන ගනු ඇත. ඔබට යෝධයන්ගේ උරහිස මත නැගී සිටිය හැකි විට වාමන සතුන්ගෙන් සෑහීමට පත් විය යුත්තේ ඇයි?
sbi

1
ඉඟිය: පරිවර්තකය සම්පාදකයෙකුට වඩා පහසු ය; එය ආදාන පෙළ මත පදනම්ව "යමක් කරන" පන්තියක් පමණි. තවත් ඉඟියක්: මෙය පරාවර්තනය සමඟ බැඳ තබන්න, ඔබේ ස්ක්‍රිප්ටය සමඟ අත්තනෝමතික වස්තු පාලනය කළ හැකිය.
ඩේව් කසිනෝ

Answers:


407

මූලික වශයෙන්, ඔබේ ප්‍රශ්නය වන්නේ "පරිගණක චිප්ස්, උපදෙස් කට්ටල, මෙහෙයුම් පද්ධති, භාෂා, පුස්තකාල සහ යෙදුම් සැලසුම් කර ක්‍රියාත්මක කරන්නේ කෙසේද?" එය ලොව පුරා ඩොලර් බිලියන ගණනක කර්මාන්තයක් වන අතර එය මිලියන ගණනක් සේවයේ යොදවා ඇති අතර ඔවුන්ගෙන් බොහෝ දෙනෙක් විශේෂ ists යෝ වෙති. ඔබේ ප්‍රශ්නය තව ටිකක් යොමු කිරීමට ඔබට අවශ්‍ය විය හැකිය.

එයින් කියැවුණේ, මට ඉරිතැලීමක් කළ හැකිය:

මිනිසුන් ක්‍රමලේඛන භාෂා නිර්මාණය කරන්නේ කෙසේද සහ ඒ සඳහා සම්පාදකයින් නිර්මාණය කරන්නේ කෙසේදැයි මට තේරුම් ගත නොහැක.

එය මට පුදුමයකි, නමුත් බොහෝ දෙනෙක් ක්‍රමලේඛන භාෂාවන් ඉන්ද්‍රජාලික ලෙස සලකති. සාදවලදී හෝ වෙනත් ඕනෑම දෙයකදී මිනිසුන් මුණගැසෙන විට, මා කුමක් කරන්නේදැයි ඔවුන් මගෙන් ඇසුවොත් මම ඔවුන්ට කියන්නේ මම ක්‍රමලේඛන භාෂා සැලසුම් කර සම්පාදකයින් සහ මෙවලම් ක්‍රියාත්මක කරන බවත්, මිනිසුන් - වෘත්තීය ක්‍රමලේඛකයින්, ඔබ මතක තබා ගන්නා වාර ගණන පුදුමයට කරුණක් බවත්ය. "වාව්, මම කවදාවත් ඒ ගැන හිතුවේ නැහැ, නමුත් ඔව්, කවුරුහරි ඒ දේවල් සැලසුම් කළ යුතුයි". එය දැනටමත් ඔවුන් වටා ඇති මෙවලම් යටිතල ව්‍යුහයන් සමඟ භාෂාවන් මුළුමනින්ම බිහි වේ යැයි ඔවුන් සිතූවාක් මෙනි.

ඒවා නිකම්ම පෙනෙන්නේ නැත. භාෂා වෙනත් ඕනෑම නිෂ්පාදනයක් මෙන් නිර්මාණය කර ඇත: තරඟකාරී හැකියාවන් අතර වෙළඳ ගනුදෙනු මාලාවක් ප්‍රවේශමෙන් කිරීමෙන්. සම්පාදකයින් සහ මෙවලම් වෙනත් ඕනෑම වෘත්තීය මෘදුකාංග නිෂ්පාදනයක් මෙන් ගොඩනගා ඇත: ගැටළුව බිඳ දැමීමෙන්, වරකට එක් කේත පේළියක් ලිවීමෙන් හා එහි ප්‍රති ing ලයක් ලෙස ඇති වන වැඩසටහනෙන් හෙක් පරීක්ෂා කිරීම.

භාෂා නිර්මාණය විශාල මාතෘකාවකි. ඔබ භාෂාවක් සැලසුම් කිරීමට කැමති නම්, ආරම්භ කිරීමට හොඳ ස්ථානයක් වන්නේ ඔබ දැනටමත් දන්නා භාෂාවක ඇති අඩුපාඩු මොනවාදැයි සිතා බැලීමයි. නිර්මාණ තීරණ බොහෝ විට පැන නගින්නේ වෙනත් නිෂ්පාදනයක් තුළ නිර්මාණ දෝෂයක් සලකා බැලීමෙනි.

විකල්පයක් ලෙස, ඔබ උනන්දුවක් දක්වන වසමක් සලකා බලා, එම වසමේ ගැටළු වලට විසඳුම් නියම කරන වසම්-විශේෂිත භාෂාවක් (DSL) සැලසුම් කරන්න. ඔබ ලොගෝ ගැන සඳහන් කළා; එය "රේඛා ඇඳීම" වසම සඳහා ඩී.එස්.එල්. නිත්‍ය ප්‍රකාශන යනු “නූලක රටාවක් සොයා ගැනීම” සඳහා වන ඩීඑස්එල් ය. C # / VB හි LINQ යනු “පෙරණය, සම්බන්ධ වීම, වර්ග කිරීම සහ ව්‍යාපෘති දත්ත” වසම සඳහා වන DSL ය. HTML යනු “පිටුවක පෙළ සැකැස්ම විස්තර කරන්න” වසම සඳහා ඩී.එස්.එල්. භාෂාව පදනම් කරගත් විසඳුම් සඳහා සුදුසු වසම් රාශියක් ඇත. මගේ ප්‍රියතම එකක් වන්නේ ඉන්ෆෝම් 7, එය “පෙළ මත පදනම් වූ ත්‍රාසජනක ක්‍රීඩා” වසම සඳහා ඩීඑස්එල් ය; එය බොහෝ විට මා දැක ඇති ඉහළම මට්ටමේ බරපතල ක්‍රමලේඛන භාෂාව විය හැකිය.

ඔබේ භාෂාව කෙබඳු විය යුතුද යන්න ඔබ විසින් සටහන් කළ පසු, නීතිමය සහ නීති විරෝධී වැඩසටහනක් යනු කුමක්ද යන්න තීරණය කිරීම සඳහා වන නීති මොනවාදැයි හරියටම ලිවීමට උත්සාහ කරන්න . සාමාන්‍යයෙන් ඔබට මෙය මට්ටම් තුනකින් කිරීමට අවශ්‍ය වනු ඇත:

  1. lexical : භාෂාවේ වචන සඳහා වන නීති මොනවාද, කුමන චරිත නීත්‍යානුකූලද, සංඛ්‍යා මොන වගේද, සහ යනාදිය.
  2. syntactic : භාෂාවේ වචන විශාල ඒකකවලට ඒකාබද්ධ වන්නේ කෙසේද? C # විශාල ඒකක යනු ප්‍රකාශන, ප්‍රකාශ, ක්‍රම, පන්ති සහ යනාදියයි.
  3. අර්ථකථනය : සින්ටැක්ටිකල් නෛතික වැඩසටහනක් ලබා දී ඇති විට, වැඩසටහන කරන්නේ කුමක්දැයි ඔබ හඳුනා ගන්නේ කෙසේද ?

ඔබට හැකි පමණින් මෙම නීති ලියන්න . ඔබ එය හොඳ කාර්යයක් කරන්නේ නම් ඔබට එය සම්පාදකයෙකු හෝ පරිවර්තකයෙකු ලිවීමේ පදනම ලෙස භාවිතා කළ හැකිය. මා අදහස් කරන්නේ කුමක්දැයි බැලීමට C # පිරිවිතර හෝ ECMAScript පිරිවිතර දෙස බලන්න; ඒවා නීතිමය වැඩපිළිවෙළක් කරන්නේ කුමක් ද යන්න සහ යමෙකු කරන්නේ කුමක්ද යන්න විස්තර කරන ඉතා නිවැරදි නීති රීති වලින් පිරී ඇත.

සම්පාදකයෙකු ලිවීම ආරම්භ කිරීම සඳහා හොඳම ක්‍රමයක් වන්නේ ඉහළ මට්ටමේ සිට ඉහළ මට්ටමේ භාෂා සම්පාදකයෙකු ලිවීමයි . ඔබේ භාෂාවෙන් නූල් ගෙන C # හෝ JavaScript හෝ ඔබ දන්නා ඕනෑම භාෂාවක නූල් විහිදුවන සම්පාදකයෙකු ලියන්න; එම භාෂාව සඳහා සම්පාදකයාට එය ක්‍රියාත්මක කළ හැකි කේතයක් බවට පත්කිරීමේ බර එසවීම ගැන සැලකිලිමත් වීමට ඉඩ දෙන්න.

මම C #, VB, VBScript, JavaScript සහ වෙනත් භාෂා සහ මෙවලම් සැලසුම් කිරීම ගැන බ්ලොග් අඩවියක් ලියමි; මෙම විෂය ඔබට කැමති නම්, එය පරීක්ෂා කරන්න. http://blogs.msdn.com/ericlippert (historical තිහාසික ) සහ http://ericlippert.com (වත්මන්)

විශේෂයෙන් ඔබට මෙම ලිපිය රසවත් විය හැකිය; C # සම්පාදකයා එහි අර්ථකථන විශ්ලේෂණය අතරතුර ඔබ වෙනුවෙන් ඉටු කරන බොහෝ කාර්යයන් මෙහි ලැයිස්තුගත කරමි. ඔබට පෙනෙන පරිදි, පියවර ගොඩක් තිබේ. අපි විශාල විශ්ලේෂණ ගැටලුව තනි තනිව විසඳිය හැකි ගැටළු මාලාවක් බවට පත් කරමු.

http://blogs.msdn.com/b/ericlippert/archive/2010/02/04/how-many-passes.aspx

අවසාන වශයෙන්, ඔබ වයසින් මුහුකුරා ගිය විට මේ දේවල් කරන රැකියාවක් සොයන්නේ නම් මයික්‍රොසොෆ්ට් විශ්ව විද්‍යාලයට ඇතුළුවී සංවර්ධක අංශයට ඇතුළු වීමට උත්සාහ කරන්න. අද මම මගේ රැකියාව අවසන් කළේ එලෙසයි!


සීඑල්ආර් ස්වයංක්‍රීයව කළ හැකි බැවින් තවදුරටත් සම්පාදක ප්‍රශස්තිකරණයන් සිදු නොකිරීමට ඔබ ලියා තිබේද?

6
Or තෝර්බ්ජර්න්: පාරිභාෂිතය ගැන පැහැදිලි වෙමු. “සම්පාදකය” යනු එක් ක්‍රමලේඛන භාෂාවක සිට තවත් ක්‍රමයකට පරිවර්තනය කරන ඕනෑම උපාංගයකි. C # අයිඑල් බවට හරවන සී # සම්පාදකයෙකු සහ අයිඑල් යන්ත්රය කේතය බවට හරවන අයිඑල් සම්පාදකයෙකු ("ජිටර්") තිබීම පිළිබඳ හොඳ දෙයක් නම්, ඔබට සී # සම්පාදකය අයිඑල් වෙත ලිවීම (පහසුයි!), සහ ප්‍රොසෙසරය විශේෂිත ප්‍රශස්තිකරණය විහිළුවට දමන්න. සම්පාදක ප්‍රශස්තිකරණය "සිදු නොකෙරේ" යන්න නොවේ, ජිට් සම්පාදක කණ්ඩායම අප වෙනුවෙන් ඒවා කරයි. Blogs.msdn.com/b/ericlippert/archive/2009/06/11/…
එරික් ලිපර්ට්

6
Yc සයික්ලොටිස් 04: ඉන්ෆෝම් 6 ඉසෙඩ් කේතයට සම්පාදනය කරයි, එය බයිට්කෝඩ් මත පදනම් වූ අථත්‍ය යන්ත්‍රයක අතිශය මුල් කාලීන උදාහරණයකි. 1980 ගණන්වල ඇති සියලුම ඉන්ෆොකොම් ක්‍රීඩා මතකයට වඩා විශාල විය හැකි අතර විවිධ ගෘහ නිර්මාණ ශිල්පයට අතේ ගෙන යා හැකිය. ක්‍රීඩා z- කේතයට සම්පාදනය කරන ලද අතර පසුව කේත මතක පේජිං සහිත z- කේත පරිවර්තකයන් බහු යන්ත්‍ර සඳහා ක්‍රියාත්මක කරන ලදී. වර්තමානයේ ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය නම් අත් ඔරලෝසුවක zcode පරිවර්තකයක් ධාවනය කළ හැකිය, නමුත් උසස් තාක්‍ෂණයෙන් යුත් දවසේදී . වැඩි විස්තර සඳහා en.wikipedia.org/wiki/Z-machine බලන්න.
එරික් ලිපර්ට්

Ric එරික්ලිපර්ට් කම්පයිලර් යනු උපාංගයක් නොවේ, උපාංගය යනු දෘඩාංග අඩංගු දෙයකි. ආදාන දත්ත යන්ත්‍ර කේතයට පරිවර්තනය කිරීම සඳහා නීති මාලාවක් ඇති පූර්ව නිශ්චිත වැඩසටහනක් අපට පැවසිය හැකිය
ධරම්

2
hadhams: උපාංගයක් යනු කිසියම් අරමුණක් සඳහා සාදන ලද ඕනෑම දෙයකි. මා විසින් ලියන ලද සෑම සම්පාදකයෙකුම ක්‍රියාත්මක වූයේ දෘඩාංග මත වන අතර එය සම්පාදකයින්ගේ පැවැත්මට ඉඩ සලසයි.
එරික් ලිපර්ට්

127

ඔබට වැටහෙනු ඇති Compiler ගොඩනගනු කරමු සම්පාදනය හා එකලස් භාෂාව ලිවීම සිත්ගන්නා හඳුන්වා ජැක් Crenshaw විසින්.

කතුවරයා එය ඉතා සරළව තබා ඇති අතර සැබෑ ක්‍රියාකාරිත්වය ගොඩනැගීම කෙරෙහි අවධානය යොමු කළේය.


2
ක්‍රෙන්ෂෝගේ හැඳින්වීම පිළිබඳ සිත්ගන්නා කරුණ නම් එය අවසන් වීමයි (ස්පොයිලර්: එය අසම්පූර්ණයි) ඔබ අවබෝධ කර ගත හැකි ගැටළු වලට ඔබ දුවන කාලය ගැන, ඒයි, එය ක්‍රියාත්මක කිරීමට පෙර මගේ භාෂාව මුළුමනින්ම සැලසුම් කර තිබිය යුතුය. ඊට පස්සෙ ඔයා කියනවා, ඒයි, මට සම්පූර්ණ භාෂා පිරිවිතරයක් ලිවිය යුතු නම්, එය විධිමත් අංකනයකින් නොකරන්නේ නම්, පසුව මට විග්‍රහයක් ජනනය කිරීම සඳහා මෙවලමක් බවට පෝෂණය කළ හැකිය. ඊට පස්සෙ ඔයා ඒක කරන්නේ අනිත් අය වගේ.
කාරුණික

3
indkindall, මෙවලම් භාවිතා කිරීමට හේතුවක් ඇති බව වටහා ගැනීම සඳහා ඔබ එය අතින් කළ යුතුය.

72

"මම ඇත්තටම මේ දේවල් ඉගෙන ගැනීමට කැමතියි". ඔබ දිගු කාලීන බැරෑරුම් නම්:

  • විද්‍යාලයට යන්න, මෘදුකාංග ඉංජිනේරු විද්‍යාව පිළිබඳ විශේෂ ize දැනුමක් ලබා ගන්න. ඔබට ලබා ගත හැකි සෑම සම්පාදක පන්තියක්ම ගන්න. පංති සපයන පුද්ගලයින් ඔබට වඩා හොඳ උගත් හා පළපුරුදු අයයි; කේත කියවීමෙන් ඔබට කිසි විටෙකත් නොලැබෙන අයුරින් තොරතුරු ඔබට ඉදිරිපත් කිරීමට ඔවුන්ගේ විශේෂ expert දෘෂ්ටිකෝණයන් භාවිතා කිරීම හොඳය.

  • උසස් පාසල හරහා ගණිත පන්ති සමඟ රැඳී සිටිමින් වසර 4 ක්ම විද්‍යාලයේ දිගටම කරගෙන යන්න. සම්මත නොවන ගණිතය කෙරෙහි අවධානය යොමු කරන්න: තර්කනය, කණ්ඩායම් න්‍යාය, මෙටා ගණිතය. මෙය වියුක්තව සිතීමට ඔබට බල කරනු ඇත. සම්පාදනය පිළිබඳ උසස් න්‍යාය පත්‍රිකා කියවීමට සහ එම න්‍යායන් සිත්ගන්නාසුළු හා ප්‍රයෝජනවත් වන්නේ මන්දැයි තේරුම් ගැනීමට එය ඔබට ඉඩ සලසයි. ඔබට සදාකාලිකවම කලාවේ තත්වය පිටුපස සිටීමට අවශ්‍ය නම් ඔබට එම උසස් න්‍යායන් නොසලකා හැරිය හැකිය.

  • සම්මත සම්පාදක පෙළ එකතු කරන්න / කියවන්න: අහෝ / උල්මන් යනාදිය. ප්‍රජාව පොදුවේ එකඟ වන දේ මූලික දේ වේ. ඔබ එම පොත් වලින් සියල්ල භාවිතා නොකරනු ඇත, නමුත් එය පවතින බව ඔබ දැනගත යුතු අතර ඔබ එය භාවිතා නොකරන්නේ මන්දැයි ඔබ දැනගත යුතුය. මම හිතුවේ මුච්නික් විශිෂ්ටයි, නමුත් එය ඉතා දියුණු මාතෘකා සඳහා ය.

  • සම්පාදකයෙකු සාදන්න. කුණු වූ එකක් තැනීමෙන් දැන් ආරම්භ කරන්න. මෙය ඔබට ගැටළු කිහිපයක් උගන්වනු ඇත. දෙවැන්න සාදන්න. නැවත නැවත කරන්න. මෙම අත්දැකීම ඔබේ පොත් ඉගෙනීම සමඟ විශාල සහජීවනයක් ගොඩනංවයි.

  • ආරම්භ කිරීමට හොඳ තැනක් වන්නේ BNF (Backus Naur Form), parsers සහ parser-generator ගැන ඉගෙන ගැනීමයි. BNF comp ලදායි ලෙස සම්පාදක භූමිය තුළ භාවිතා වන අතර, ඔබ එය නොදන්නේ නම් ඔබට සෙසු සම්පාදක වර්ග සමඟ යථාර්ථවාදීව කථා කළ නොහැක.

ඔබට සම්පාදනය සඳහා විශිෂ්ට පළමු හැඳින්වීමක් අවශ්‍ය නම්, සහ බීඑන්එෆ් හි value ජු වටිනාකම හුදෙක් ලේඛන සඳහා පමණක් නොව, මෙවලම් සැකසිය හැකි ලෝහ භාෂාවක් ලෙස නම්, “මෙටා” සම්පාදකයින් (සම්පාදකයින් ගොඩනඟන සම්පාදකයින්) මත පදනම්ව මෙම නිබන්ධනය (මගේ නොවේ) බලන්න . 1964 සිට කඩදාසි (ඔව්, ඔබ එය නිවැරදිව කියෙව්වා) [වැල් ෂෝර් විසින් රචිත "මෙටා II සින්ටැක්ස්-නැඹුරු සම්පාදක ලිවීමේ භාෂාවක්". (http://doi.acm.org/10.1145/800257.808896)] මෙම IMHO මෙතෙක් ලියන ලද හොඳම සංයුක්ත විද්‍යා පත්‍රිකා වලින් එකකි: පිටු 10 කින් සම්පාදක-සම්පාදකයින් තැනීමට එය ඔබට උගන්වයි. මම මුලින් ඉගෙන ගත්තේ මේ පත්තරයෙන්.

මා ඉහත ලියා ඇති දේ පෞද්ගලික අත්දැකීම් වලින් බොහෝමයක් වන අතර, එය මට හොඳ සේවයක් කර ඇතැයි මම සිතමි. YMMV, නමුත් IMHO, වැඩි වශයෙන් නොවේ.


54
-1 ඉහත කිසිවක් අවශ්‍ය නොවේ.
නීල් බටර්වර්ත්

77
ඉහත කිසිවක් අවශ්‍ය නොවේ. නමුත් ඉහත සියල්ලම උපකාරී වේ. ඇත්තටම ගොඩක්.
කොන්රාඩ් රුඩොල්ෆ්

1
"වියුක්තව සිතීමට ගණිතය ඉගෙන ගන්න!" සමඟ මම විශේෂයෙන් එකඟ නොවෙමි. යෝජනාව. ඔබේම ක්‍රමලේඛන භාෂාව සහ සම්පාදකයා නිර්මාණය කිරීමට "වියුක්තව සිතීමට ඉගෙනීම" විශේෂයෙන් උපකාරී වේ යැයි ඔබ සිතුවත් (මම එසේ නොකරමි - මෙම වටරවුමෙන්, ඇදහිය නොහැකි තරම් වක්‍ර මාර්ගවලට වඩා ඉගෙනීමෙන් ඉගෙනීම වඩා ප්‍රයෝජනවත් බව මට පෙනේ) , වියුක්ත චින්තනයක් ඇති එකම ක්ෂේත්‍රය ගණිතය නොවේ! (මම ගණිත ian btw, එබැවින් මම සාමාන්‍යයෙන් ගණිතය භාවිතය ප්‍රතික්ෂේප නොකරමි, මෙම විශේෂිත අවස්ථාවෙහිදී එය අදාළ වේ ...)
grautur

26
සම්පාදක න්‍යාය පිළිබඳ උසස් තාක්ෂණික පත්‍රිකා කියවීමට ඔබට අවශ්‍ය නම්, ඔබ ගණිතමය වශයෙන් දක්ෂ විය යුතුය. එම සාහිත්‍යය නොසලකා හැරීමට ඔබට තීරණය කළ හැකි අතර, ඔබේ න්‍යාය සහ ඒ නිසා සම්පාදකයින් ඒ සඳහා දුප්පත් වනු ඇත. විධිමත් අධ්‍යාපනයක් නොමැතිව ඔබට සම්පාදකයෙකු ගොඩනගා ගත හැකි බව මෙහි සිටින naysayers සියල්ලම පෙන්වා දෙන අතර මම එකඟ වෙමි. එය නොමැතිව ඔබට හොඳ සම්පාදකයින් සෑදිය හැකි බව ඔවුන් ඇඟවුම් කරයි. එය මා ගැනීමට කැමති ඔට්ටුවක් නොවේ.
ඉරා බැක්ස්ටර්

7
CS යනු භාෂා නිර්මාණයට සහ ක්‍රියාත්මක කිරීමට අව්‍යාජ ලෙස ප්‍රයෝජනවත් වන විනයකි. ඇත්ත වශයෙන්ම අනිවාර්ය නොවේ, නමුත් දශක ගණනාවක් තිස්සේ කරන ලද පර්යේෂණයන් උත්තේජනය කළ හැකි හා කළ යුතු අතර, අනෙක් අයගේ වැරදි නැවත කිරීමට කිසිදු හේතුවක් නැත.
ඩොනල් ෆෙලෝස්

46

මෙන්න ඔබට අනුගමනය කළ හැකි මාර්ගගත පොතක් / පා course මාලාවක් The Elements of Computing Systems: පළමු මූලධර්ම වලින් නවීන පරිගණකයක් තැනීම .

සිමියුලේටර් භාවිතා කරමින්, ඔබ සැබවින්ම සම්පූර්ණ පරිගණක පද්ධතියක් ගොඩනඟයි. බොහෝ විචාරකයින් ඔබගේ ප්‍රශ්නය ඉතා පුළුල් බව ප්‍රකාශ කර ඇති අතර, මෙම පොත ඇත්ත වශයෙන්ම එයට පිළිතුරු සපයන්නේ ඉතා කළමනාකරණය කළ හැකි මට්ටමක සිටියදීය. ඔබ අවසන් වූ විට, ඔබ ඔබේම මෙහෙයුම් පද්ධතියේ ක්‍රියාකාරිත්වය භාවිතා කරන ඉහළ මට්ටමේ භාෂාවකින් (ඔබ නිර්මාණය කළ) ක්‍රීඩාවක් ලියා ඇති අතර එය ඔබේ සම්පාදකයා විසින් VM භාෂාවකට (ඔබ නිර්මාණය කළ) සම්පාදනය කරනු ලැබේ. ඔබේ වීඑම් පරිවර්තකයා විසින් එකලස් කරන ලද භාෂාවකට පරිවර්තනය කර ඇති අතර, එය ඔබේ එකලස් කරන්නා විසින් යන්ත්‍ර කේතයට (ඔබ විසින් නිර්මාණය කරන ලද) එකලස් කරනු ලබන අතර එය ඔබේ පරිගණක පද්ධතිය මත ක්‍රියාත්මක වන අතර ඔබ නිර්මාණය කළ චිප්ස් වලින් බූලියන් තර්කනය භාවිතා කරමින් සහ සරල දෘඩාංග විස්තර භාෂාවක්.

පරිච්ඡේද:

  1. පා Over මාලා දළ විශ්ලේෂණය
  2. බූලියන් තර්කනය
  3. සංයුක්ත චිප්ස්
  4. අනුක්‍රමික චිප්ස්
  5. යන්ත්‍ර භාෂාව
  6. පරිගණක ගෘහ නිර්මාණ ශිල්පය
  7. එකලස් කරන්නා
  8. අතථ්‍ය යන්ත්‍ර I: අංක ගණිතය
  9. අතථ්‍ය යන්ත්‍ර II: පාලනය
  10. ක්‍රමලේඛන භාෂාව
  11. සම්පාදක I: සින්ටැක්ස් විශ්ලේෂණය
  12. සම්පාදක II: කේත උත්පාදනය
  13. මෙහෙයුම් පද්ධතිය
  14. ලැයිස්තු අයිතමය

යන්නට තවත් විනෝදයක්


සංස්කරණයට ස්තූතියි, නොදන්නා පුද්ගලයා. මම කිහිප වතාවක් උත්සාහ කළ නමුත් විස්තරය සඳහා මගේ සිතුවිලි ප්‍රමාණවත් ලෙස යොමු කර ගැනීමට නොහැකි විය ... නමුත් පොත සඳහන් නොකිරීමට අවශ්‍ය නොවීය. පොත දැන් මාර්ගගතව අධ්‍යයන සැලසුම් සබැඳිය: www1.idc.ac.il/tecs/plan.html . එය අන්තර්ජාලය තුළ ද ඉතා සාධාරණ ලෙස මිල කර ඇත. සෑම කෙනෙකුටම විනෝද වන්න.
ජෝ ඉන්ටර්නෙට්

මම මෙය යෝජනා කිරීමට යන්නේ ... කම්මැලි අය සඳහා මිනිත්තු 10 හැඳින්වීම බලන්න: NAND සිට ටෙට්‍රිස් දක්වා පියවර 12 කින් @ youtube.com/watch?v=JtXvUoPx4Qs
රිචඩ් ඇන්තනි හයින්

46

අඩියක් පස්සට යන්න. සම්පාදකය යනු හුදෙක් එක් භාෂාවක ලේඛනයක් වෙනත් භාෂාවක ලේඛනයකට පරිවර්තනය කරන වැඩසටහනකි. භාෂා දෙකම මනාව නිර්වචනය කර නිශ්චිත විය යුතුය.

භාෂා ක්‍රමලේඛන භාෂා විය යුතු නැත. ඒවා නීති රීති ලිවිය හැකි ඕනෑම භාෂාවක් විය හැකිය. ඔබ බොහෝ විට ගූගල් පරිවර්තනය දැක ඇත ; එය සම්පාදකයෙකු වන බැවින් එයට එක් භාෂාවක් (කියන්න, ජර්මානු) තවත් භාෂාවකට පරිවර්තනය කළ හැකිය (ජපන්, සමහර විට).

සම්පාදකයෙකුගේ තවත් උදාහරණයක් වන්නේ HTML විදැහුම්කරණ එන්ජිමකි. එහි ආදානය HTML ගොනුවක් වන අතර ප්‍රතිදානය තිරය මත පික්සෙල් ඇඳීමට උපදෙස් මාලාවක් වේ.

බොහෝ අය සම්පාදකයෙකු ගැන කතා කරන විට, ඔවුන් සාමාන්‍යයෙන් යොමු කරනුයේ ඉහළ මට්ටමේ ක්‍රමලේඛන භාෂාවක් (ජාවා, සී, ප්‍රොලොග් වැනි) පහත් මට්ටමේ (එකලස් කිරීම හෝ යන්ත්‍ර කේතය) බවට පරිවර්තනය කරන වැඩසටහනකට ය. එය බියකරු විය හැකිය. සම්පාදකයෙකු යනු එක් භාෂාවක් තවත් භාෂාවක් බවට පරිවර්තනය කරන වැඩසටහනක් බව ඔබ සාමාන්‍යවාදියෙකුගේ මතය ගත් විට එය එතරම් නරක නැත.

සෑම වචනයක්ම නූලකින් ආපසු හරවන වැඩසටහනක් ඔබට ලිවිය හැකිද? උදාහරණයක් වශයෙන්:

When the cat's away, the mice will play.

බවට පත්වේ

nehW eht s'tac yawa, eht ecim lliw yalp.

එය ලිවීමට අපහසු වැඩසටහනක් නොවේ, නමුත් ඔබ සමහර දේවල් ගැන සිතා බැලිය යුතුය:

  • "වචනයක්" යනු කුමක්ද? වචනයක් සෑදෙන චරිත මොනවාදැයි ඔබට නිර්වචනය කළ හැකිද?
  • වචන ආරම්භ වී අවසන් වන්නේ කොතැනින්ද?
  • වචන වෙන් කර ඇත්තේ එක් ඉඩකින් පමණක්ද, නැතිනම් වැඩි හෝ අඩු විය හැකිද?
  • විරාම ලකුණු ද ආපසු හැරවිය යුතුද?
  • වචනයක් තුළ විරාම ලකුණු යෙදීම ගැන කුමක් කිව හැකිද?
  • ලොකු අකුරු වලට කුමක් සිදුවේද?

මෙම ප්‍රශ්නවලට පිළිතුරු භාෂාව හොඳින් අර්ථ දැක්වීමට උපකාරී වේ. දැන් ඉදිරියට ගොස් වැඩසටහන ලියන්න. සුභ පැතුම්, ඔබ දැන් සම්පාදකයෙකු ලියා ඇත.

මේ ගැන: ඔබට චිත්‍ර ඇඳීමේ උපදෙස් මාලාවක් ගෙන PNG (හෝ JPEG) ගොනුවක් ප්‍රතිදානය කරන වැඩසටහනක් ලිවිය හැකිද? සමහර විට මේ වගේ දෙයක්:

image 100 100
background black
color red
line 20 55 93 105
color green
box 0 0 99 99

නැවතත්, භාෂාව අර්ථ දැක්වීම සඳහා ඔබ යම් චින්තනයක් කළ යුතුය:

  • ප්‍රාථමික උපදෙස් මොනවාද?
  • "රේඛාව" යන වචනයට පසුව පැමිණෙන්නේ කුමක්ද? "වර්ණයෙන්" පසුව පැමිණෙන්නේ කුමක්ද? එලෙසම "පසුබිම", "කොටුව" යනාදිය සඳහා.
  • අංකයක් යනු කුමක්ද?
  • හිස් ආදාන ගොනුවකට අවසර තිබේද?
  • වචන විශාල කර ගැනීම හරිද?
  • Negative ණ සංඛ්‍යා වලට අවසර තිබේද?
  • ඔබ "රූප" විධානය ලබා නොදෙන්නේ නම් කුමක් සිදුවේද?
  • වර්ණයක් නියම නොකිරීම හරිද?

ඇත්ත වශයෙන්ම, පිළිතුරු දීමට තවත් ප්‍රශ්න ඇති නමුත් ඔබට ඒවා ඇණ ගැසීමට හැකි නම්, ඔබ භාෂාවක් අර්ථ දක්වා ඇත. පරිවර්තනය කිරීම සඳහා ඔබ ලියන වැඩසටහන, ඔබ එය අනුමාන කරයි, සම්පාදකයෙකි.

ඔබට පෙනේ, සම්පාදකයෙකු ලිවීම එතරම් අපහසු නොවේ. ඔබ ජාවා හෝ සී හි භාවිතා කළ සම්පාදකයින් මෙම උදාහරණ දෙකේ විශාල අනුවාදයන් පමණි. එබැවින් ඒ සඳහා යන්න! සරල භාෂාවක් නිර්වචනය කර එම භාෂාව යමක් කිරීමට වැඩසටහනක් ලියන්න. වැඩි කල් යන්නට මත්තෙන් ඔබේ භාෂාව දීර් extend කිරීමට ඔබට අවශ්‍ය වනු ඇත. උදාහරණයක් ලෙස, ඔබට විචල්‍යයන් හෝ අංක ගණිත ප්‍රකාශන එක් කිරීමට අවශ්‍ය විය හැකිය. ඔබේ සම්පාදකයා වඩාත් සංකීර්ණ වනු ඇත, නමුත් ඔබ එය තනිවම ලියා ඇති නිසා ඔබට ඒ සෑම දෙයක්ම අවබෝධ වනු ඇත. බව ය භාෂා සහ අවස්තා ගැන පැමිණ ආකාරය.


7
myFirstCompiler = (str) -> ("" + (str || "")). භේදය (''). ප්‍රතිලෝම (). එක්වන්න (''); jsfiddle.net/L7qSr
ලැරී සටන

21

ඔබ සම්පාදක සැලසුම ගැන උනන්දුවක් දක්වන්නේ නම්, ඩ්‍රැගන් පොත බලන්න (නිල මාතෘකාව: සම්පාදකයින් : මූලධර්ම, ශිල්පක්‍රම සහ මෙවලම්). එය මෙම මාතෘකාව පිළිබඳ සම්භාව්‍ය පොතක් ලෙස පුළුල් ලෙස සැලකේ.


4
සටහන, මෙම පොතෙන් උපරිම ප්‍රයෝජන ගැනීමට ඔබට තව ටිකක් සත්‍ය අත්දැකීම් අවශ්‍ය විය හැකිය. විශිෂ්ට සඳහනක්.

13
-1 මකර පොත හොඳ යැයි සිතිය හැක්කේ එය කියවා නැති කෙනෙකුට පමණි. එය විශේෂයෙන් ප්‍රශ්නයට ආමන්ත්‍රණය නොකරයි.
නීල් බටර්වර්ත්

33
මකර පොත? උද්යෝගිමත් පහළොස් හැවිරිදි දරුවෙකුට? මම කැමතියි ඔහු තව දුරටත් ඔහුගේ උද්යෝගය තබා ගැනීමට.
ඩේවිඩ් තෝර්න්ලි

1
වඩාත් ප්‍රවේශ විය හැකි විකල්පයක්: 'ක්‍රමලේඛන භාෂා ප්‍රායෝගික විද්‍යාව' 3e .
willjcroz

Av ඩේවිඩ්ටෝර්න්ලි ඔහුව සම්පූර්ණයෙන්ම ගණන් නොගන්න (ඔව්, මෙය ඉතා පැරණි තනතුරක් බව මට වැටහී ඇත). වයස අවුරුදු 15 දී භාෂා ක්‍රියා කරන ආකාරය පිළිබඳව මම පර්යේෂණ ආරම්භ කළ අතර අථත්‍ය යන්ත්‍ර කෙරෙහි විශේෂයෙන් අවධානය යොමු කළෙමි. දැන් මට වයස අවුරුදු 16 යි. මාස ගණනක පර්යේෂණ, ලිවීම් සහ නැවත ලිවීමෙන් පසු මට සතුටු වන වැඩකරන පරිවර්තකයෙකු සහ සම්පාදකයෙකු සිටී.
ඩේවිඩ්

10

"අපි සම්පාදකයෙකු ගොඩනඟමු" දැනටමත් යෝජනා කර ඇත. ටර්බෝ පැස්කල් වෙනුවට හස්කල් භාවිතා කරමින් "නවීකරණය කරන ලද" අනුවාදයක් ඇත: http://alephnullplex.appspot.com/blog/view/2010/01/12/lbach-1-introduction

හස්කල් සමඟ එක්ව, තවත් අදහස් ලබා දිය හැකි ඉතා උපදේශාත්මක යෝජනා ක්‍රම පරිවර්තකයෙකු ඇත: පැය 48 කින් ඔබම යෝජනා ක්‍රමයක් ලියන්න


10

සම්පාදකයෙකු හෝ මෙහෙයුම් පද්ධතියක් පිළිබඳ මැජික් කිසිවක් ඇතැයි විශ්වාස නොකරන්න: නැත. සියළුම ස්වර නූලක ගණන් කිරීමට ඔබ ලියූ වැඩසටහන් මතකද, නැතහොත් අරාවෙහි සංඛ්‍යා එකතු කරන්න? සම්පාදකයෙකු සංකල්පයේ වෙනස් නොවේ; ඒක ගොඩක් ලොකුයි.

සෑම වැඩසටහනකටම අදියර තුනක් ඇත:

  1. සමහර දේවල් කියවන්න
  2. එම දේවල් ක්‍රියාවට නංවන්න: ආදාන දත්ත ප්‍රතිදාන දත්තයට පරිවර්තනය කරන්න
  3. වෙනත් දේවල් ලියන්න - ප්‍රතිදාන දත්ත

ඒ ගැන සිතන්න: සම්පාදකයාට ආදානය යනු කුමක්ද? ප්‍රභව ගොනුවක අක්ෂර මාලාවක්.

සම්පාදකයාගේ ප්‍රතිදානය යනු කුමක්ද? ඉලක්කගත පරිගණකයට යන්ත්‍ර උපදෙස් නියෝජනය කරන බයිට් මාලාවක්.

ඉතින් සම්පාදකයාගේ “ක්‍රියාවලිය” අවධිය කුමක්ද? එම අදියර කරන්නේ කුමක්ද?

වෙනත් වැඩ වැනි - - ඔබ සම්පාදකවරයා බව සලකා නම් කර මෙම අදියර තුනක් ඇතුළත් කිරීමට, ඔබට සම්පාදක ඉදි කරන ආකාරය හොඳ අදහසක් වෙයි.


3
නීල් පැවසූ පරිදි සත්‍ය නමුත් ප්‍රයෝජනවත් නොවේ. පුනරාවර්තන ව්‍යාකරණ හා සංකේත වගු වැනි මූලික සම්පාදක අංගයන් පැහැදිලිවම නොපෙනේ.
මේසන් වීලර්

1
Ason මේසන් වීලර්: මම සිතන්නේ යථාර්ථවාදීව සම්පාදකයෙකු ලිවීමට (සහ ඉලක්ක භාෂාව සැලසුම් කිරීමට?) අපේක්‍ෂා කරන බොහෝ විට පුනරාවර්තන ව්‍යාකරණ හා සංකේත වගු මූලික සංකල්ප යැයි සිතනු ඇත.
FumbleFingers

8

මම විශේෂ expert යෙක් නොවෙමි, නමුත් මෙන්න මගේ පිහිය:

සම්පාදකයෙකු ලිවීම ගැන ඔබ අසන බවක් නොපෙනේ. මෙය ඇත්තෙන්ම මැජික් නොවේ.

යමෙකු සොරකම් කිරීම SO වෙතින් පිළිතුරු සපයයි ( /programming/3826692/how-do-i-translate-assembly-to-binary ), එකලස් කිරීම මේ වගේ ය:

label:  LDA #$00
        JMP label

ඉන්පසු ඔබ එය එකලස් කරන්නෙකු හරහා ධාවනය කර මේ වගේ දෙයක් බවට පත් කරන්න:

$A9 $00
$4C $10 $00

මේ සියල්ලම මේ ආකාරයට කොටු වී ඇත:

$A9 $00 $4C $10 $00

එය ඇත්තෙන්ම මැජික් නොවේ.

ඔබට එය නොට්පෑඩයේ ලිවිය නොහැක, මන්ද නොට්පෑඩ් ASCII භාවිතා කරයි (හෙක්ස් නොවේ). ඔබ හෙක්ස් සංස්කාරකයක් භාවිතා කරනු ඇත, නැතහොත් ක්‍රමයෙන් බයිට් ලියන්න. ඔබ එම හෙක්ස් ගොනුවකට ලියා, එයට "a.exe" හෝ "a.out" ලෙස නම් කරන්න, ඉන්පසු එය ක්‍රියාත්මක කිරීමට මෙහෙයුම් පද්ධතියට කියන්න.

ඇත්ත වශයෙන්ම, නවීන CPU සහ මෙහෙයුම් පද්ධති සැබවින්ම තරමක් සංකීර්ණ නමුත් මූලික අදහස එයයි.

ඔබට නව සම්පාදකයෙකු ලිවීමට අවශ්‍ය නම්, එය සිදු කරන ආකාරය මෙන්න:

1) පයිපර්සිං හි (හෝ වෙනත් හොඳ විග්‍රහ කිරීමේ රාමුවක්) කැල්කියුලේටරය වැනි යමක් භාවිතා කරමින් පරිවර්ථනය කරන ලද භාෂාවක් ලියන්න. එමඟින් විග්‍රහ කිරීමේ මූලික කරුණු වේගවත් කිරීමට ඔබට හැකි වේ.

2) පරිවර්තකයෙකු ලියන්න. ඔබේ භාෂාව ජාවාස්ක්‍රිප්ට් බවට පරිවර්තනය කරන්න. දැන් ඔබේ භාෂාව බ්‍රව්සරයක ක්‍රියාත්මක වේ.

3) LLVM, C, හෝ එකලස් කිරීම වැනි පහත් මට්ටමකට පරිවර්තකයෙකු ලියන්න.

ඔබට මෙහි නතර කළ හැකිය, මෙය සම්පාදකයෙකි. එය ප්‍රශස්තිකරණ සම්පාදකයෙකු නොවේ, නමුත් එය ප්‍රශ්නය නොවේ. ඔබට සබැඳියක් සහ එකලස් කිරීමක් ලිවීම ගැනද සලකා බැලිය යුතුය, නමුත් ඔබට ඇත්තටම අවශ්‍යද?

4) (උමතු) ප්‍රශස්තකරණය ලියන්න. විශාල කණ්ඩායම් මේ සඳහා දශක ගණනාවක් තිස්සේ වැඩ කරති.

4) (සාන්) පවතින ප්‍රජාවකට සම්බන්ධ වන්න. GCC, LLVM, PyPy, ඕනෑම පරිවර්තකයෙකු මත වැඩ කරන ප්‍රධාන කණ්ඩායම.


8

තවත් කිහිප දෙනෙක් විශිෂ්ට පිළිතුරු ලබා දී ඇත. මම තවත් යෝජනා කිහිපයක් එකතු කරන්නම්. පළමුව, ඔබ කිරීමට උත්සාහ කරන දේ සඳහා හොඳ පොතක් වන්නේ ඇපල්ගේ නවීන සම්පාදක ක්‍රියාත්මක කිරීමේ පෙළයි (ඔබේ තේරීම සී , ජාවා හෝ ස්ටෑන්ඩර්ඩ් එම්එල් ගන්න ). ටයිගර්, සරල භාෂාවක් සඳහා සම්පාදකයෙකු සම්පුර්ණයෙන්ම ක්‍රියාත්මක කිරීමෙන් මෙම පොත ඔබව ගෙන යනු ඇත, අවම ධාවන කාල ආධාරක පුස්තකාලයක් සමඟ ඉමුලේටරයක ධාවනය කළ හැකි MIPS එකලස් කිරීම. සම්පාදනය කරන ලද භාෂා කෘතියක් කිරීමට අවශ්‍ය සෑම දෙයක්ම තනිවම ලබා ගැනීම සඳහා, එය ඉතා හොඳ පොතක් 1 .

කලින් සැලසුම් කරන ලද භාෂාවක් සම්පාදනය කරන්නේ කෙසේද යන්න ඇපල් විසින් ඔබව ගෙන යනු ඇත, නමුත් විවිධ භාෂා අංගයන්ගෙන් අදහස් කරන්නේ කුමක්ද යන්න ගැන හෝ ඔබේම නිර්මාණය සඳහා ඔවුන්ගේ සාපේක්ෂ කුසලතා අනුව ඒවා ගැන සිතන්නේ කෙසේද යන්න පිළිබඳව වැඩි කාලයක් ගත නොකරයි. එම අංගය සඳහා, ක්‍රමලේඛන භාෂා: සංකල්ප සහ ඉදිකිරීම් යහපත් ය. පරිගණක ක්‍රමලේඛනයේ සංකල්ප, ශිල්පීය ක්‍රම සහ ආකෘති ද භාෂා නිර්මාණය ගැන ගැඹුරින් සිතා බැලීමට හොඳ පොතක් වන නමුත් එය තනි භාෂාවක ( ඕස් ) සන්දර්භය තුළ එසේ කරයි .

අවසාන වශයෙන්, ඇපල්ගේ පා ​​text ය සී, ජාවා සහ ස්ටෑන්ඩර්ඩ් එම්එල් හි ඇති බව මම සඳහන් කළෙමි - ඔබ සම්පාදක ඉදිකිරීම් සහ ක්‍රමලේඛන භාෂා ගැන බැරෑරුම් නම්, එම්එල් ඉගෙනීමට සහ ඇපල්හි එම අනුවාදය භාවිතා කිරීමට මම නිර්දේශ කරමි. එම්එල්-පවුල් භාෂාවන්හි ප්‍රබල ආකාරයේ පද්ධති ප්‍රධාන වශයෙන් ක්‍රියාකාරී වේ - විශේෂාංග වෙනත් බොහෝ භාෂාවන්ට වඩා වෙනස් වනු ඇත, එබැවින් ඔබ දැනටමත් ක්‍රියාකාරී භාෂාවක් නොදන්නේ නම් ඒවා ඉගෙන ගැනීමෙන් ඔබේ භාෂා ශිල්පය දියුණු වේ. එසේම, ඒවායේ රටා ගැලපීම සහ ක්‍රියාකාරී මනෝභාවයන් ඔබ බොහෝ විට සම්පාදකයෙකු තුළ කළ යුතු හැසිරවීම් වලට අතිශයින්ම ගැලපේ, එබැවින් එම්එල් පදනම් කරගත් භාෂාවලින් ලියන ලද සම්පාදකයින් සාමාන්‍යයෙන් සී හි ලියා ඇති සම්පාදකයින්ට වඩා කෙටි හා තේරුම් ගැනීමට පහසුය. ජාවා, හෝ ඒ හා සමාන භාෂා. හාපර්ගේ පොතස්ටෑන්ඩර්ඩ් එම්එල් යනු ඔබ ආරම්භ කිරීමට හොඳ මඟ පෙන්වීමකි; ඒ හරහා වැඩ කිරීමෙන් ඔබ ඇපල් ස්ටෑන්ඩර්ඩ් එම්එල් සම්පාදක ක්‍රියාත්මක කිරීමේ පොත ලබා ගැනීමට සූදානම් විය යුතුය. ඔබ ස්ටෑන්ඩර්ඩ් එම්එල් ඉගෙන ගන්නේ නම්, පසුකාලීන වැඩ සඳහා OCaml ලබා ගැනීමද පහසු වනු ඇත; IMO, එය වැඩකරන ක්‍රමලේඛකයාට වඩා හොඳ මෙවලම් ඇත (අවට මෙහෙයුම් පද්ධති පරිසරය සමඟ වඩාත් පිරිසිදුව ඒකාබද්ධ කරයි, පහසුවෙන් ක්‍රියාත්මක කළ හැකි වැඩසටහන් නිෂ්පාදනය කරයි, සහ ulex සහ Menhir වැනි දර්ශනීය සම්පාදක-ගොඩනැඟිලි මෙවලම් ඇත).


1 දිගුකාලීන යොමු කිරීම සඳහා, මම ඩ්‍රැගන් පොතට වැඩි කැමැත්තක් දක්වන්නෙමි, මන්දයත් මා විසින් යොමු කිරීමට ඉඩ ඇති කරුණු පිළිබඳ වැඩි විස්තර පාර්සර් ඇල්ගොරිතම වල අභ්‍යන්තර ක්‍රියාකාරකම් සහ විවිධ ප්‍රවේශයන් පිළිබඳ පුළුල් ආවරණයක් ඇත, නමුත් ඇපල්ගේ පොත ඉතා හොඳයි පළමු සාමාර්ථය සඳහා. මූලික වශයෙන්, ඇපල් ඔබට සම්පාදකයා හරහා දේවල් කිරීමට එක් ක්‍රමයක් උගන්වන අතර ඒ හරහා ඔබට මග පෙන්වයි. ඩ්‍රැගන් පොත විවිධ සැලසුම් විකල්පයන් වඩාත් විස්තරාත්මකව ආවරණය කරයි, නමුත් යමක් වැඩ කරන්නේ කෙසේද යන්න පිළිබඳ අඩු මග පෙන්වීමක් සපයයි.


සංස්කරණය කරන ලදි : වැරදි අහෝ යොමුව සෙති සමඟ ආදේශ කරන්න, CTMCP සඳහන් කරන්න.


අහ්, මගේ විශ්ව විද්‍යාල පරිවර්තකයන්ගේ පන්තිය සඳහා අත්‍යවශ්‍ය භාෂා ක්‍රමලේඛන භාෂා මා සතුව තිබුණි. එය AWFUL විය. මම පෞද්ගලිකව යෝජනා ක්‍රමයට කැමතියි. නමුත් වාක්‍ය ඛණ්ඩයට කමක් නැත, එය මා වෙනුවෙන් විනාශ කළ සංකල්ප පිළිබඳ කතුවරුන්ගේ දුර්වල පැහැදිලි කිරීම් ය.
ග්‍රෙග් ගයිඩා

මම ඇපල්ගේ අඛණ්ඩතාවයන් සමඟ සම්පාදනය කිරීමට කැමතියි, නමුත් ඔහුගේ පොත් පූර්ව දැනුමක් ඇති බව මට පෙනී ගියේය.
ජෝන් හැරොප්

6

විද්‍යාලයේ පන්තිය සඳහා සම්පාදකයෙකු නිර්මාණය කිරීමට මට සිදු විය.

මෙය සිදු කිරීමේ මූලික කරුණු ඔබ සිතන තරම් සංකීර්ණ නොවේ. පළමු පියවර වන්නේ ඔබේ ව්‍යාකරණ නිර්මාණය කිරීමයි. ඉංග්‍රීසි භාෂාවේ ව්‍යාකරණ ගැන සිතන්න. ඒ ආකාරයෙන්ම ඔබට වාක්‍යයක් විෂයයක් තිබේ නම් එය විග්‍රහ කර පුරෝකථනය කළ හැකිය. සන්දර්භය නිදහස් ව්‍යාකරණ පිළිබඳ වැඩි විස්තර සඳහා කියවන්න .

ඔබ ව්‍යාකරණ අඩු කළ පසු (ඔබේ භාෂාවේ නීති), සම්පාදකයෙකු ලිවීම එම නීති අනුගමනය කිරීම තරම්ම සරල ය. සම්පාදකයින් සාමාන්‍යයෙන් යන්ත්‍ර කේතයට පරිවර්ථනය කරයි, නමුත් ඔබට x86 ඉගෙන ගැනීමට අවශ්‍ය නම් මිස, මම ඔබට යෝජනා කරන්නේ MIPS දෙස බැලීමට හෝ ඔබේම අථත්‍ය යන්ත්‍රයක් සෑදීමට ය.

සම්පාදකයින්ට සාමාන්‍යයෙන් කොටස් දෙකක් ඇත, ස්කෑනරයක් සහ විග්‍රහකය. මූලික වශයෙන්, ස්කෑනරය කේතයේ කියවා එය ටෝකන ලෙස වෙන් කරයි. විග්‍රහකයා එම ටෝකන වල ව්‍යුහය දෙස බලයි. එවිට සම්පාදකයා එය හරහා ගොස් ඔබට අවශ්‍ය ඕනෑම කේතයකට පරිවර්තනය කිරීම සඳහා තරමක් සරල නීති කිහිපයක් අනුගමනය කරයි (එකලස් කිරීම, බයිට් කේතය වැනි අතරමැදි කේතය ආදිය). ඔබ එය කුඩා හා කුඩා කැබලිවලට කඩා දැමුවහොත්, මෙය කිසිසේත් බියජනක නොවේ.

වාසනාව!


8
සංකල්පමය වශයෙන් සරලද? ඔව්. ඇත්තටම සරලද? අංක
නීල් බටර්වර්ත්

7
අහ්. සම්පාදකයා, පරිලෝකනය කිරීමෙන් / විග්‍රහ කිරීමෙන් පසු ටයිප් පරීක්‍ෂා කිරීම / අනුමාන කිරීම, ප්‍රශස්තිකරණය, රෙජිස්ටර් වෙන් කිරීම යනාදිය කළ යුතුය. මෙම පියවර ඕනෑම දෙයක් නමුත් සරල ය. (පරිවර්ථනය කළ කේතය භාවිතා කරන විට, ඔබ මෙම කොටස් ධාවන කාලයට කල්
දමයි

මගෙන් ඡන්දය ප්‍රකාශ නොකෙරේ: සම්පාදකයින්ට මූලික කොටස් දෙකක් ඇති අතර, ඉන් එකක් නම් වැඩසටහන පිළිබඳ වියුක්ත විස්තරයක් ගොඩ නැගීමයි (එය සාමාන්‍යයෙන් පරිලෝකනය හා විග්‍රහ කිරීම ලෙස බිඳී ඇත) සහ අනෙක එම වියුක්ත විස්තරයේ පිටපතක් නැවත සමහරක් තුළ ලිවීමයි. වෙනත් ආකාරයක් (උදා: යන්ත්‍ර කේතය). (පැති සටහන: සම්පාදකයින් ප්‍රශස්තිකරණය කිරීම සාමාන්‍යයෙන් එය ලිවීමට පෙර වියුක්ත විස්තරය වැඩි දියුණු කිරීමට උත්සාහ කරයි, නමුත් එය ශෝධනයක් වේ.)
ඩොනල් ෆෙලෝස්

6

පෙට්සෝල්ඩ්ගේ පොත් කේතය පළමු මූලධර්ම වලින් ආරම්භ වන තාක්‍ෂණික නොවන සහ තාක්‍ෂණ ශිල්පීන් සඳහා විශිෂ්ට හැඳින්වීමකි. එය ඕනෑවට වඩා කියවා නොගෙන එහි විෂය පථය තුළ විශාල වශයෙන් කියවිය හැකි සහ විශාල ය.

දැන් මම මෙය ලියා ඇති නිසා, මට එය නැවත කියවීමට සිදුවේ.


5

ඔබට මෙම විශිෂ්ට ප්‍රශ්නය (සහ පිළිතුරු) StackOverflow හි පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය: සම්පාදකයෙකු ලිවීමට ඉගෙනීම . එහි පුළුල් සම්පත් ලැයිස්තුවක් අඩංගු වේ.


5

මෙම ත්‍රෙඩ් එකේ විශිෂ්ට පිළිතුරු ඇත, නමුත් මට අවශ්‍ය වූයේ වරක් මටත් එකම ප්‍රශ්නය ඇති බැවින් මගේ එකතු කිරීමටය. (එසේම, ජෝ-ඉන්ටර්නෙට් විසින් යෝජනා කරන ලද පොත විශිෂ්ට සම්පතක් බව පෙන්වා දීමට කැමැත්තෙමි.)

පළමුවැන්න පරිගණකය ක්‍රියා කරන්නේ කෙසේද යන ප්‍රශ්නයයි. මෙයයි: ආදානය -> ගණනය කිරීම -> ප්‍රතිදානය.

පළමුව “ගණනය කරන්න” කොටස සලකා බලන්න. ආදානය සහ ප්‍රතිදානය පසුව ක්‍රියා කරන්නේ කෙසේදැයි අපි පසුව සොයා බලමු.

පරිගණකයක් අවශ්‍යයෙන්ම සකසනයකින් (හෝ CPU) සහ සමහර මතකය (හෝ RAM) වලින් සමන්විත වේ. මතකය යනු එක් එක් සීමිත බිටු සංඛ්‍යාවක් ගබඩා කළ හැකි ස්ථාන එකතුවක් වන අතර, එවැනි සෑම මතක ස්ථානයක්ම අංකයකින් යොමු කළ හැකිය, මෙය මතක ස්ථානයේ ලිපිනය ලෙස හැඳින්වේ. සකසනය යනු දත්ත ලබා ගත හැකි ගැජට් එකකි මතකයෙන්, දත්ත මත පදනම්ව සමහර මෙහෙයුම් සිදු කර සමහර දත්ත නැවත මතකයට ලියන්න. මතකයෙන් දත්ත කියවීමෙන් පසු කියවිය යුත්තේ කුමක්ද සහ කුමක් කළ යුතුද යන්න සකසනය හඳුනා ගන්නේ කෙසේද?

මෙයට පිළිතුරු සැපයීම සඳහා අප සකසනයක ව්‍යුහය තේරුම් ගත යුතුය. පහත දැක්වෙන්නේ තරමක් සරල දසුනකි. ප්‍රොසෙසරයක් මූලික වශයෙන් කොටස් දෙකකින් සමන්විත වේ. එකක් ප්‍රොසෙසරය තුළ ගොඩනගා ඇති මතක ස්ථාන සමූහයකි. මේවා “රෙජිස්ටර්” ලෙස හැඳින්වේ. දෙවැන්න ලේඛනයේ ඇති දත්ත උපයෝගී කරගනිමින් යම් යම් මෙහෙයුම් සිදු කිරීම සඳහා ඉදිකරන ලද ඉලෙක්ට්‍රොනික යන්ත්‍රෝපකරණ සමූහයකි. “වැඩසටහන් කවුන්ටරය” හෝ පරිගණකය සහ “උපදෙස් ලේඛනය” හෝ ir යනුවෙන් හැඳින්වෙන විශේෂ ලේඛණ දෙකක් තිබේ. සකසනය මතකය කොටස් තුනකට බෙදා ඇති බව සලකයි. පළමු කොටස වන්නේ “ක්‍රමලේඛ මතකය” වන අතර එය ක්‍රියාත්මක වන පරිගණක වැඩසටහන ගබඩා කරයි. දෙවැන්න “දත්ත මතකය” ය. තෙවැන්න විශේෂ අරමුණු සඳහා භාවිතා කරයි, අපි පසුව ඒ ගැන කතා කරමු. වැඩසටහන් මතකයෙන් කියවීමට ඊළඟ උපදෙස් ඇති ස්ථානය වැඩසටහන් කවුන්ටරයේ අඩංගු වේ. උපදෙස් කවුන්ටරයේ දැනට ක්‍රියාත්මක වන මෙහෙයුමට යොමු වන අංකයක් අඩංගු වේ. ප්‍රොසෙසරයකට කළ හැකි සෑම මෙහෙයුමක්ම මෙහෙයුමේ ඔප්කෝඩ් ලෙස හැඳින්වේ. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. උපදෙස් කවුන්ටරයේ දැනට ක්‍රියාත්මක වන මෙහෙයුමට යොමු වන අංකයක් අඩංගු වේ. ප්‍රොසෙසරයකට කළ හැකි සෑම මෙහෙයුමක්ම මෙහෙයුමේ ඔප්කෝඩ් ලෙස හැඳින්වේ. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. උපදෙස් කවුන්ටරයේ දැනට ක්‍රියාත්මක වන මෙහෙයුමට යොමු වන අංකයක් අඩංගු වේ. ප්‍රොසෙසරයකට කළ හැකි සෑම මෙහෙයුමක්ම මෙහෙයුමේ ඔප්කෝඩ් ලෙස හැඳින්වේ. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. ප්‍රොසෙසරයකට කළ හැකි සෑම මෙහෙයුමක්ම මෙහෙයුමේ ඔප්කෝඩ් ලෙස හැඳින්වේ. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. ප්‍රොසෙසරයකට කළ හැකි සෑම මෙහෙයුමක්ම මෙහෙයුමේ ඔප්කෝඩ් ලෙස හැඳින්වේ. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය. පරිගණකයක් අත්‍යවශ්‍යයෙන්ම ක්‍රියා කරන ආකාරය එය ක්‍රමලේඛ කවුන්ටරය විසින් යොමු කරන ලද මතක ලේඛනය උපදෙස් ලේඛනයට කියවීමයි (තවද එය වැඩසටහන් කවුන්ටරය වැඩි කරන අතර එය ඊළඟ උපදෙස් වල මතක ස්ථානයට යොමු කරයි). ඊළඟට, එය උපදෙස් ලේඛනය කියවා අපේක්ෂිත මෙහෙයුම සිදු කරයි. උදාහරණයක් ලෙස උපදෙස් විය හැක්කේ නිශ්චිත මතක ස්ථානයක් ලේඛනයකට කියවීම, හෝ යම් ලේඛනයකට ලිවීම හෝ රෙජිස්ටර් දෙකක අගයන් භාවිතා කර යම් මෙහෙයුමක් සිදු කිරීම සහ ප්‍රතිදානය තුන්වන ලේඛනයට ලිවීම ය.

දැන් පරිගණකය ආදාන / ප්‍රතිදානය සිදු කරන්නේ කෙසේද? මම ඉතා සරල පිළිතුරක් දෙන්නම්. Http://en.wikipedia.org/wiki/Input/output සහ http://en.wikipedia.org/wiki/Interrupt බලන්න. තවදුරටත්. එය කරුණු දෙකක් භාවිතා කරයි, එම මතකයේ තුන්වන කොටස සහ බාධා කිරීම් ලෙස හැඳින්වේ. පරිගණකයකට අමුණා ඇති සෑම උපාංගයක්ම ප්‍රොසෙසරය සමඟ දත්ත හුවමාරු කර ගත යුතුය. එය එසේ කරන්නේ කලින් සඳහන් කළ මතකයේ තුන්වන කොටස භාවිතා කරමිනි. ප්‍රොසෙසරය සෑම උපාංගයක් සඳහාම මතක පෙත්තක් වෙන් කරන අතර උපාංගය සහ ප්‍රොසෙසරය එම මතක පෙත්ත හරහා සන්නිවේදනය කරයි. නමුත් උපාංගය දත්ත හුවමාරු කර ගැනීමට අවශ්‍ය වන්නේ කුමන උපාංගයටද යන්න සකසනය දැන ගන්නේ කෙසේද? බාධා කිරීම් පැමිණෙන්නේ මෙහිදීය. බාධා කිරීම යනු ප්‍රොසෙසරයට දැනට පවතින දේ විරාමයක් තබා එහි ඇති සියලුම ලේඛන දන්නා ස්ථානයකට ඉතිරි කර වෙනත් දෙයක් කිරීමට පටන් ගැනීමයි. බොහෝ බාධා කිරීම් ඇත, සෑම එකක්ම අද්විතීය අංකයකින් හඳුනා ගනී. එක් එක් බාධා කිරීම් සඳහා, ඒ හා සම්බන්ධ විශේෂ වැඩසටහනක් ඇත. බාධා ඇති වූ විට, ප්‍රොසෙසරය බාධාවට අනුරූපව වැඩසටහන ක්‍රියාත්මක කරයි. දැන් ජෛව විද්‍යාව සහ දෘඩාංග උපාංග පරිගණක මවු පුවරුවට සම්බන්ධ වන්නේ කෙසේද යන්න මත පදනම්ව, සෑම උපාංගයකටම අද්විතීය බාධා කිරීම් සහ මතක පෙත්තක් ලැබේ. ජෛව පද්ධතියේ ආධාරයෙන් මෙහෙයුම් පද්ධතිය ආරම්භ කිරීමේදී එක් එක් උපාංගයේ බාධා කිරීම් සහ මතක පිහිටීම තීරණය වන අතර උපාංග නිසි ලෙස හැසිරවීමට බාධා සඳහා විශේෂ වැඩසටහන් සකස් කරයි. එබැවින් උපාංගයකට යම් දත්තයක් අවශ්‍ය වූ විට හෝ යම් දත්තයක් යැවීමට අවශ්‍ය වූ විට, එය බාධාවක් සං als ා කරයි. ප්‍රොසෙසරය එය කරන්නේ කුමක් දැයි විරාමයක් තබා, බාධා කිරීම් හසුරුවා පසුව එය කරන දෙයට නැවත පැමිණේ. HDD, යතුරුපුවරුව වැනි බොහෝ ආකාරයේ බාධා කිරීම් වේ. වැදගත් එකක් වන්නේ පද්ධති කාලරාමුවයි, එය නියමිත වේලාවට බාධා කිරීම් සිදු කරයි. මෘදුකාංග බාධා කිරීම් ලෙස හැඳින්වෙන බාධා කිරීම් අවුලුවන ඔප්කෝඩ් ද ඇත.

මෙහෙයුම් පද්ධතියක් ක්‍රියාත්මක වන ආකාරය දැන් අපට බොහෝ දුරට තේරුම් ගත හැකිය. එය ආරම්භ වන විට, ඕඑස් ටයිමර් බාධා කිරීමක් සකසයි, එවිට එය නියමිත වේලාවට ඕඑස් පාලනය කරයි. එය වෙනත් උපාංග හැසිරවීමට වෙනත් බාධා කිරීම් ද සකසයි. දැන් පරිගණකය වැඩසටහන් රාශියක් ක්‍රියාත්මක කරන විට සහ ටයිමර් බාධා කිරීම් සිදු වූ විට OS පාලනය ලබා ගන්නා අතර ක්‍රියාවලි කළමනාකරණය, මතක කළමනාකරණය වැනි වැදගත් කාර්යයන් ඉටු කරයි. වැඩසටහන් වලට දෘඩාංග උපාංග වෙත ප්‍රවේශ වීමට වියුක්ත ක්‍රමයක් මිස උපාංගවලට කෙලින්ම ප්‍රවේශ වීමට ඉඩ නොදේ. වැඩසටහනකට උපාංගයකට ප්‍රවේශ වීමට අවශ්‍ය වූ විට, එය OS විසින් සපයන ලද යම් කේතයක් අමතා උපාංගය සමඟ කථා කරයි. සමගාමී, නූල්, අගුල්, මතක කළමනාකරණය යනාදිය සම්බන්ධ බොහෝ න්‍යායන් මේ සඳහා සම්බන්ධ වේ.

දැන්, කෙනෙකුට න්‍යායිකව ඔප්කෝඩ් භාවිතයෙන් කෙලින්ම වැඩසටහනක් ලිවිය හැකිය. මෙය යන්ත්‍ර කේතය ලෙස හැඳින්වේ. මෙය පැහැදිලිවම ඉතා වේදනාකාරී ය. දැන් ප්‍රොසෙසරය සඳහා එකලස් කිරීමේ භාෂාවක් යනු මෙම ඔප්කෝඩ් සඳහා වන සිහිවටන මිස අන් කිසිවක් නොවේ, එමඟින් වැඩසටහන් ලිවීම පහසු කරයි. සරල එකලස් කිරීම යනු එකලස් කිරීමේදී ලියා ඇති වැඩසටහනක් ගෙන මතක සටහන් වෙනුවට සුදුසු ඔප්කෝඩ් ආදේශ කරන වැඩසටහනකි.

ප්‍රොසෙසරයක් සහ එකලස් කිරීමේ භාෂාවක් සැලසුම් කිරීම සඳහා යමෙකු යන්නේ කෙසේද? පරිගණක ගෘහ නිර්මාණ ශිල්පය පිළිබඳ පොත් කිහිපයක් කියවිය යුතු බව දැන ගැනීමට. (ජෝ-ඉන්ටර්නෙට් විසින් යොමු කරන ලද පොතේ 1-7 පරිච්ඡේද බලන්න). මෙයට බූලියන් වීජ ගණිතය ඉගෙනීම, එකතු කිරීම සඳහා සරල සංයුක්ත පරිපථ සෑදීම, ගුණ කිරීම යනාදිය, මතකය සහ අනුක්‍රමික පරිපථ ගොඩනගන්නේ කෙසේද, මයික්‍රොප්‍රොසෙසරයක් සාදා ගන්නේ කෙසේද සහ යනාදිය ඇතුළත් වේ.

දැන් යමෙක් පරිගණක භාෂා ලියන්නේ කෙසේද? යන්ත්‍ර කේතයේ සරල එකලස් කරන්නෙකු ලිවීමෙන් කෙනෙකුට ආරම්භ කළ හැකිය. C හි සරල උප කුලකයක් සඳහා සම්පාදකයෙකු ලිවීමට එම එකලස් කරන්නා භාවිතා කරන්න. ඉන්පසු C හි වඩාත් සම්පූර්ණ අනුවාදයක් ලිවීමට C හි උප කුලකය භාවිතා කරන්න. අවසාන වශයෙන් C භාවිතා කර පයිතන් හෝ C ++ වැනි වඩාත් සංකීර්ණ භාෂාවක් ලිවීමට. ඇත්ත වශයෙන්ම භාෂාවක් ලිවීමට ඔබ එය මුලින්ම සැලසුම් කළ යුතුය (ඔබ සකසනයකට කැමති ආකාරයටම). නැවතත් ඒ පිළිබඳ පෙළපොත් කිහිපයක් දෙස බලන්න.

යමෙක් ඕඑස් එකක් ලියන්නේ කෙසේද? පළමුව ඔබ ඉලක්ක කරන්නේ x86 වැනි වේදිකාවක්. එවිට එය ආරම්භ වන්නේ කෙසේදැයි ඔබ වටහා ගනී. සාමාන්‍ය පරිගණකයක් මේ ආකාරයෙන් ආරම්භ වේ. එය ආරම්භ වන අතර බයෝස් සමහර පරීක්ෂණ සිදු කරයි. එවිට බයෝස් විසින් HDD හි පළමු අංශය කියවා අන්තර්ගතය මතකයේ නිශ්චිත ස්ථානයකට පටවනු ලැබේ. මෙම පටවන ලද දත්ත ක්‍රියාත්මක කිරීම ආරම්භ කිරීම සඳහා එය cpu සකස් කරයි. ඔබ ආයාචනා කරන කාරණය මෙයයි. මෙම අවස්ථාවේදී සාමාන්‍ය ඕඑස් එකක් මතකයේ ඉතිරි වේ. ඉන්පසු එය උපාංග ආරම්භ කර වෙනත් දේ සැකසෙන අතර අවසානයේ එය පිවිසුම් තිරය සමඟ ඔබට සුබ පතයි.

ඕඑස් එකක් ලිවීමට ඔබ “ඇරඹුම් කාරකය” ලිවිය යුතුය. එවිට ඔබ බාධා කිරීම් සහ උපාංග හැසිරවීමට කේත ලිවිය යුතුය. ක්‍රියාවලි කළමනාකරණය, උපාංග කළමනාකරණය යනාදිය සඳහා ඔබ සියලු කේත ලිවිය යුතුය. ඉන්පසු ඔබ ඔබේ පරිගණකයේ ක්‍රියාත්මක වන වැඩසටහන් වලට උපාංග සහ වෙනත් සම්පත් වෙත ප්‍රවේශ වීමට ඉඩ සලසන api එකක් ලිවිය යුතුය. අවසාන වශයෙන් ඔබ කේතයක් ලිවිය යුත්තේ තැටියෙන් වැඩසටහනක් කියවා එය ක්‍රියාවලියක් ලෙස සකසා එය ක්‍රියාත්මක කිරීමට පටන් ගනිමිනි.

ඇත්ත වශයෙන්ම මගේ පිළිතුර අතිශයින්ම සරල කර ඇති අතර බොහෝ විට එතරම් ප්‍රායෝගික භාවිතයක් නොමැත. මගේ ආරක්ෂාව වෙනුවෙන් මම දැන් න්‍යාය පිළිබඳ උපාධිධාරී ශිෂ්‍යයෙක්, එබැවින් මට මේ බොහෝ දේ අමතක වී ඇත. නමුත් ඔබට මෙම දේවල් බොහොමයක් ගූගල් කර වැඩි විස්තර දැනගත හැකිය.


4

මගේ ක්‍රමලේඛන වෘත්තියේ යම් කරුණක් මට මතකයි, මම ඔබට සමාන ව්‍යාකූල තත්වයක සිටියදී: මම න්‍යාය ගැන මඳක් කියවා ඇත්තෙමි, ඩ්‍රැගන් පොත, ටයිගර් පොත (රතු), නමුත් තවමත් එතරම් ප්‍රමාණයක් නොතිබුණි ඒ සියල්ල එකට දැමිය යුතු ආකාරය පිළිබඳ ඉඟියක්.

එය කුමක් එකට බැඳී නැත කිරීමට කොන්ක්රීට් ව්යාපෘතිය සොයා විය කරන්න (සහ මම එකම සියලු න්යාය කුඩා උප කුලකයක් අවශ්ය බව සොයා).

ජාවා වීඑම් මට හොඳ ආරම්භක ස්ථානයක් ලබා දුන්නේය: එය සංකල්පමය වශයෙන් “ප්‍රොසෙසරයක්” වන නමුත් එය සැබෑ CPU වල අවුල් සහගත තොරතුරු වලින් අතිශයින් වියුක්ත වේ. ඉගෙනීමේ ක්‍රියාවලියේ වැදගත් හා බොහෝ විට නොසලකා හරින ලද කොටසක් ද එය සපයයි: ඒවා නැවත එකට තැබීමට පෙර දේවල් වෙන් කර ගැනීම (පැරණි දිනවල ගුවන් විදුලි කට්ටල සමඟ ළමයින් භාවිතා කළ ආකාරයට).

ජාවා හි ලෝක මට්ටමේ ඩෙකොම්පයිලර් සහ හෙලෝ සමඟ සෙල්ලම් කරන්න. JVM පිරිවිතර කියවා සිදුවන්නේ කුමක්ද යන්න තේරුම් ගැනීමට උත්සාහ කරන්න. මෙය සම්පාදකයා කරන්නේ කුමක්ද යන්න පිළිබඳව ඔබට අවබෝධයක් ලබා දෙනු ඇත .

ඉන්පසු හෙලෝ, ලෝක මට්ටමේ නිර්මාණය කරන කේත සමඟ සෙල්ලම් කරන්න . (ඇත්ත වශයෙන්ම ඔබ ආයුබෝවන්, වර්ල්ඩ් යැයි පමණක් පැවසිය හැකි ඉහළ විශේෂිත භාෂාවක් සඳහා යෙදුම්-විශේෂිත සම්පාදකයෙකු නිර්මාණය කරයි.)

හෙලෝ, වර්ල්ඩ් වෙනත් භාෂාවකින් ලිවිය හැකි කේත ලිවීමට උත්සාහ කර එකම පන්තියේ ප්‍රතිදානය කරන්න. එය සාදන්න එවිට ඔබට "හෙලෝ, වර්ල්ඩ්" සිට වෙනත් දෙයකට වෙනස් කළ හැකිය.

දැන් "2 * (3 + 4)" වැනි ගණිත ප්‍රකාශනයක් ගණනය කරන පන්තියක් (ජාවාහි) සම්පාදනය කිරීමට උත්සාහ කරන්න. මෙම පංතිය වෙන් කර, එය නැවත එකට තැබිය හැකි "සෙල්ලම් සම්පාදකයෙකු" ලියන්න.


3

1) වොෂිංටන් විශ්ව විද්‍යාලයෙන් විශිෂ්ට වීඩියෝ දේශන:

සීඑස්ඊ පී 501 සම්පාදක ඉදිකිරීම් - සරත් 2009 තුව www.cs.washington.edu/education/courses/csep501/09au/lectures/video.html *

2) SICP http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ සහ එකම නමින් පොත. මෙය ඇත්ත වශයෙන්ම එහි සිටින ඕනෑම මෘදුකාංග ඉංජිනේරුවරයෙකුට අනිවාර්ය වේ.

3) එසේම, ක්‍රියාකාරී වැඩසටහන්කරණය, හස්කල්, ලැම්බඩා කැල්කියුලස්, අර්ථ නිරූපණය (අර්ථ දැක්වීම ඇතුළුව) සහ ක්‍රියාකාරී භාෂාවන් සඳහා සම්පාදක ක්‍රියාත්මක කිරීම. ඔබ දැනටමත් හස්කල්ව දන්නවා නම් 2005-SS-FP.V10.2005-05-24.HDV සිට ආරම්භ කළ හැකිය. Uxx වීඩියෝ යනු පිළිතුරු ය. කරුණාකර පළමුව Vxx වීඩියෝ අනුගමනය කරන්න .

http://video.s-inf.de/#FP.2005-SS-Giesl.(COt).HD_Videoaufzeichnung

(වීඩියෝ ඉංග්‍රීසියෙන්, වෙනත් පා courses මාලා ජර්මානු භාෂාවෙන් වුවද.)

  • නව පරිශීලකයින්ට පළ කළ හැක්කේ උපරිම සබැඳි දෙකක් පමණි.

3

ANTLR හොඳ ආරම්භක ස්ථානයකි. එය ලෙක්ස් සහ යාක් වලට සමාන භාෂා උත්පාදනය කරන රාමුවකි. ක්‍රියාවලිය සරල කරන ANTLRWorks නමින් ගුයි එකක් තිබේ.

.NET ලෝකයේ .NET ලෝකයේ කේත ජනනය කිරීම සඳහා භාවිතා කළ හැකි ගතික භාෂා ධාවන කාලය . මම ඩීඑල්ආර් භාවිතයෙන් කේත ජනනය කරන සෙන්ට්‍රම් නම් ප්‍රකාශන භාෂාවක් ලියා ඇත . ස්ථිතික හා ගතිකව ටයිප් කළ ප්‍රකාශන විග්‍රහ කර ක්‍රියාත්මක කරන්නේ කෙසේද යන්න එය ඔබට පෙන්වයි.


2

සම්පාදකයින් ක්‍රියා කරන ආකාරය සහ ඔබේම ක්‍රමලේඛන භාෂාව නිර්මාණය කරන්නේ කෙසේද යන්න පිළිබඳ සරල හැඳින්වීමක් සඳහා මම නව පොත http://createyourproglang.com නිර්දේශ කරමි. එය OS / CPU අභ්‍යන්තරයන්, එනම් ලෙක්සර්, පාර්සර් , පරිවර්තකයන් යනාදිය.

මෑතකදී ජනප්‍රිය කෝපි ස්ක්‍රිප්ට් සහ ෆැන්සි ක්‍රමලේඛන භාෂා නිර්මාණය කිරීමට භාවිතා කළ මෙවලම්ම එය භාවිතා කරයි .


2

ඔබ කියන සියල්ල සත්‍ය නම් ඔබට හොඳ පර්යේෂකයෙකුගේ පැතිකඩක් ඇති අතර, ස්ථිර අවබෝධයක් ලබා ගත හැක්කේ එක් මාර්ගයක් පමණි: අධ්‍යයනය. මම "කියා නෑ කියවන්න සියලු මෙම ඉහල මට්ටමේ පරිගණක විද්යාව පොත් (විශේෂයෙන්ම මෙම මෙම විසින් ලියන) ගැමියාගේ !"; මම අදහස් කළේ: චාල්ස් බේබේජ්, ඇලන් ටියුරින්, ක්ලෝඩ් ෂැනන් හෝ ඩෙනිස් රිචී වැනි පරිගණක විද්‍යා ist යෙකු වීමට ඔබ ඉහළ මට්ටමේ පුද්ගලයන් සමඟ සිටිය යුතුය. මම ස්වයං-ඉගැන්වූ අයව හෙළා දකින්නේ නැත (මම ඔවුන්ගෙන් එක් කෙනෙක්) නමුත් ඔබ වැනි බොහෝ අය එහි නොමැත. මම බරපතල ලෙස නිර්දේශ සංකේතාත්මක පද්ධති වැඩසටහන (ජ්යෙෂ්ඨ පොලිස් අධිකාරී) දී ස්ටැන්ෆර්ඩ් විශ්ව . ඔවුන්ගේ වෙබ් අඩවිය පවසන පරිදි:

ස්ටැන්ෆර්ඩ් විශ්ව විද්‍යාලයේ සංකේතාත්මක පද්ධති වැඩසටහන (එස්එස්පී) පරිගණක සහ මනස කෙරෙහි අවධානය යොමු කරයි: තොරතුරු නිරූපණය කිරීම සඳහා සංකේත භාවිතා කරන කෘතිම හා ස්වාභාවික පද්ධති. එස්එස්පී මානව-පරිගණක සම්බන්ධතාවයේ විවිධ පැතිකඩයන් කෙරෙහි උනන්දුවක් දක්වන සිසුන් සහ පී ulty ය එක් කරයි.

  • සංජානන විද්‍යාව : මානව බුද්ධිය, ස්වාභාවික භාෂා සහ මොළය පරිගණක ක්‍රියාවලියක් ලෙස අධ්‍යයනය කිරීම;
  • කෘතිම බුද්ධිය : මිනිසුන්ට සමාන හැසිරීම් සහ අවබෝධයක් ඇති පරිගණක ලබා දීම; හා
  • මානව-පරිගණක අන්තර්ක්‍රියා : පරිගණක මෘදුකාංග සැලසුම් කිරීම සහ මානව පරිශීලකයින් සමඟ හොඳින් ක්‍රියා කරන අතුරු මුහුණත්.

2

මම වම් ක්ෂේත්‍රයෙන් මඳක් යමක් යෝජනා කිරීමට යන්නෙමි: පයිතන් ඉගෙන ගන්න (හෝ සමහර විට රූබි, නමුත් මට පයිතන් පිළිබඳ තවත් අත්දැකීම් තිබේ, එබැවින් මම සාකච්ඡා කරන්නේ එයයි). හුදෙක් එය තුළට රිංගා ගැනීම නොව, එය ගැඹුරු මට්ටමින් දැන හඳුනා ගන්න.

මා මෙය යෝජනා කිරීමට හේතු කිහිපයක් තිබේ:

  1. පයිතන් යනු හොඳින් සැලසුම් කරන ලද භාෂාවකි. එයට ඉන්නන් කිහිපයක් ඇති අතර, එය වෙනත් බොහෝ භාෂාවන්ට වඩා IMHO අඩුය. ඔබ වැඩෙන භාෂා නිර්මාණකරුවෙකු නම්, හැකි තරම් හොඳ භාෂාවන්ට ඔබව නිරාවරණය කිරීම හොඳය.

  2. පයිතන්ගේ සම්මත ක්‍රියාත්මක කිරීම (සීපයිතන්) විවෘත මූලාශ්‍රයක් වන අතර හොඳින් ලේඛනගත කර ඇති අතර එමඟින් භාෂාව හුඩ් යටතේ ක්‍රියා කරන ආකාරය තේරුම් ගැනීම පහසු කරයි.

  3. එකලස් කිරීමට වඩා පහසුවෙන් තේරුම් ගත හැකි සරල පයිට් කේතයකට පයිතන් සම්පාදනය කර ඇති අතර එය පයිතන් ක්‍රියාත්මක වන සියලුම වේදිකාවල එක හා සමාන වේ. එබැවින් ඔබ සම්පාදනය ගැන ඉගෙන ගනු ඇත (පයිතන් ඔබේ ප්‍රභව කේතය බයිට් කේතයට සම්පාදනය කරන බැවින්) සහ අර්ථ නිරූපණය (මෙම බයිට් කේතය පයිතන් අතථ්‍ය යන්ත්‍රයේ අර්ථ නිරූපණය කර ඇති පරිදි).

  4. පයිතන් හි යෝජිත නව අංග රාශියක් ඇත, ඒවා අංකිත PEPs (Python Enhancement Proposals) හි ලේඛනගත කර ඇත. විශේෂාංගයක් සැබවින්ම එය කළ ආකාරය තෝරා ගැනීමට පෙර භාෂා නිර්මාණකරුවන් එය ක්‍රියාත්මක කිරීමට සලකා බැලූ ආකාරය බැලීමට PEPs සිත්ගන්නා සුළුය. (තවමත් සලකා බලනු ලබන PEPs මේ සම්බන්ධයෙන් විශේෂයෙන් සිත්ගන්නා සුළුය.)

  5. පයිතන්හි විවිධ ක්‍රමලේඛන පරාමිතීන්ගෙන් අංග රාශියක් ඇත, එබැවින් ඔබ ගැටළු විසඳීමට ප්‍රවේශ විය හැකි විවිධ ක්‍රම ගැන ඉගෙන ගනු ඇති අතර ඔබේම භාෂාවට ඇතුළත් කිරීම සලකා බැලීමට පුළුල් පරාසයක මෙවලම් ඇත.

  6. සැරසිලි කරුවන්, මෙටාක්ලාස්, ආනයන කොකු ආදියෙන් විවිධ ආකාරවලින් භාෂාව විස්තාරණය කිරීම පයිතන් පහසු කරයි, එබැවින් ඔබට භාෂාවෙන් සැබවින්ම ඉවත් නොවී නව භාෂා අංග සමඟ සෙල්ලම් කළ හැකිය. (පසෙකින්: කේත කුට්ටි යනු රූබි හි පළමු පන්තියේ වස්තූන් වන බැවින් ඔබට ඇත්ත වශයෙන්ම ලූප වැනි නව පාලන ව්‍යුහයන් ලිවිය හැකිය! මට හැඟී යන්නේ රූබි ක්‍රමලේඛකයින් අනිවාර්යයෙන්ම භාෂාව දීර් ing කිරීම ගැන නොසිතන බවයි. ඔබ රූබි හි වැඩසටහනක් කළ නමුත් එය ඉතා සිසිල් ය.)

  7. පයිතන්හිදී, ඔබට සැබවින්ම සම්පාදකයා විසින් ජනනය කරන ලද බයිට් කේතය විසුරුවා හැරිය හැකිය, නැතහොත් මුල සිටම ඔබේම දෑ ලිවිය හැකි අතර පරිවර්තකයා එය ක්‍රියාත්මක කළ හැකිය (මම මෙය මා විසින්ම කර ඇති අතර එය මනස නැමෙන නමුත් විනෝදජනක විය).

  8. පයිතන් විග්‍රහ කිරීම සඳහා හොඳ පුස්තකාල ඇත. ඔබට පයිතන් කේතය වියුක්ත සින්ටැක්ස් ගසකට විග්‍රහ කර AST මොඩියුලය භාවිතයෙන් එය හැසිරවිය හැකිය. ඔබ නිර්මාණය කරන අත්තනෝමතික භාෂා විග්‍රහ කිරීමට පයිපාර්සිං මොඩියුලය ප්‍රයෝජනවත් වේ. ඔබට අවශ්‍ය නම් න්‍යායාත්මකව ඔබේ පළමු භාෂා සම්පාදකයා පයිතන්හි ලිවිය හැකිය (එයට සී, එකලස් කිරීම හෝ පයිතන් ප්‍රතිදානය පවා ජනනය කළ හැකිය).

මෙම ගවේෂණාත්මක ප්‍රවේශය වඩාත් විධිමත් ප්‍රවේශයක් සමඟ හොඳින් යා හැකිය, මන්ද ඔබ වැඩ කරන භාෂාවෙන් ඔබ ඉගෙන ගත් සංකල්ප හඳුනා ගැනීමට පටන් ගන්නා අතර අනෙක් අතට.

විනෝද වන්න!


පයිතන් හෑරීමට නොවේ, නමුත් එය කාරණය අසල ය. දරුවාට දැනටමත් විශාල N සඳහා N භාෂා ඇත; N වර්ධක කිරීමෙන් වැඩි වෙනසක් සිදු නොවේ. උදාහරණයක් ලෙස සී ගන්න. එය සම්මතයි. එහි පුස්තකාල රාශියක් ඇත. එය හරස් වේදිකාවකි (ඔබ සම්මතයට ඇලී සිටින විට). ඔබට ප්‍රතිදානය විසුරුවා හැරිය හැක. ඔබට CFront ලිවිය හැකිය. ආදිය.
ඉයන්

1

හොඳයි, ඔබේ ප්‍රශ්නය "පරිගණක විද්‍යා උපාධියක මූලික ප්‍රායෝගික සංකල්ප මොනවාද" යනුවෙන් නැවත ලිවිය හැකි යැයි මම සිතමි. සම්පූර්ණ පිළිතුර ඇත්ත වශයෙන්ම ඔබේම පරිගණක විද්‍යාව පිළිබඳ උපාධියක් ලබා ගැනීමයි.

මූලික වශයෙන්, ඔබ ඔබේම ක්‍රමලේඛන භාෂා සම්පාදකයෙකු නිර්මාණය කරන්නේ පෙළ ගොනුවක් කියවීමෙන්, එයින් තොරතුරු උකහා ගැනීමෙන් සහ ඔබ කියවූ තොරතුරු පදනම් කරගෙන පෙළ මත පරිවර්තනයන් සිදු කිරීමෙන්, ඔබට එය කියවිය හැකි බයිට් බවට පරිවර්තනය කරන තුරු ය. පැටවුම (ලෙවින් විසින් cf, Linkers and Loaders). සුළු සුළු සම්පාදකයෙකු යනු පළමු වරට සිදු කරන විට තරමක් දැඩි ව්‍යාපෘතියකි.

මෙහෙයුම් පද්ධතියක හදවත වන්නේ සම්පත් කළමනාකරණය කරන කර්නලයයි (උදා: මතක වෙන් කිරීම / ඉවත් කිරීම), සහ කාර්යයන් / ක්‍රියාවලි / වැඩසටහන් අතර මාරු වේ.

එකලස් කිරීම යනු පෙළ-> බයිට් පරිවර්තනයකි.

ඔබ මේ දේවල් ගැන උනන්දුවක් දක්වන්නේ නම්, ලිනක්ස් හි X86 එකලස් කිරීමේ යන්ත්‍රයක් ලිවීමට මම යෝජනා කරමි. එය තරමක් සරල ප්‍රවේශ ස්ථානයක් වන අතර මෙම ගැටළු සඳහා ඔබව හඳුන්වා දෙනු ඇත. එය ළදරු ව්‍යාපෘතියක් නොවන අතර ඔබට බොහෝ දේ උගන්වනු ඇත.

මම එය C හි ලිවීමට නිර්දේශ කරමි. C යනු එම මට්ටමේ වැඩ සඳහා වන භාෂාවයි.


1
අනෙක් අතට, මෙය ඉතා ඉහළ මට්ටමේ භාෂාවක් සඳහා කදිම ස්ථානයකි. ගොනුවක තනි බයිට් නියම කිරීමට ඔබට හැකි තාක් කල්, ඔබට ඕනෑම භාෂාවකින් සම්පාදක / එකලස් කරන්නෙකු (එය පහසු) කළ හැකිය. කියන්න, perl. හෝ වී.බී.ඒ. ස්වර්ගය, හැකියාවන්!
ඉයන්

1

කෙනත් ලොඩන්ගේ "සම්පාදක ඉදිකිරීම්" පොත බලන්න

http://www.cs.sjsu.edu/~louden/cmptext/

එය සම්පාදක සංවර්ධනය සඳහා වඩා හොඳ ප්‍රවේශයක් සපයයි.

මිනිසුන් ඉගෙන ගන්නේ එසේ කිරීමෙන්. පුවරුවේ සලකුණු කර ඇති සංකේත දැකිය හැක්කේ ඉතා සුළු පිරිසකට පමණක් වන අතර න්‍යායෙන් ප්‍රායෝගිකව වහාම පනින්න. අවාසනාවකට මෙන්, එම ජනයා බොහෝ විට ප්‍රබුද්ධ, මූලධර්මවාදී සහ ඒ ගැන හයියෙන් කතා කරති.


1

මගේ පළමු එකලස් කිරීමේ භාෂාව ලෙස පීඩීපී -8 නිරාවරණය වීමට ලැබීම මට භාග්‍යයක් විය. පීඩීපී -8 සතුව ඇත්තේ උපදෙස් හයක් පමණි, ඒවා ඉතා සරල වූ අතර ඒවා නුවණැති සංරචක කිහිපයක් මඟින් ක්‍රියාත්මක කරනු ඇතැයි සිතීම පහසුය. එය සැබවින්ම පරිගණක වලින් "මැජික්" ඉවත් කළේය.

එම හෙළිදරව්ව සඳහා තවත් දොරටුව වන්නේ නූත් ඔහුගේ උදාහරණවල භාවිතා කරන “මිශ්‍ර” එකලස් කිරීමේ භාෂාවයි. "මික්ස්" අද පුරාණ ලෙස පෙනේ, නමුත් එය තවමත් එම DE- අද්භූත බලපෑමක් ඇත.


0

සම්පාදකයින් සහ ක්‍රමලේඛන භාෂා (සහ එකක් තැනීම ඇතුළුව - සීමිත ව්‍යාකරණයක් නිර්වචනය කිරීම සහ එකලස් කිරීම බවට පරිවර්තනය කිරීම වැනි) ඉතා සංකීර්ණ කාර්යයක් වන අතර එමඟින් සමස්තයක් ලෙස පද්ධති පිළිබඳව විශාල අවබෝධයක් අවශ්‍ය වේ. මෙම වර්ගයේ පා course මාලාවක් සාමාන්‍යයෙන් විශ්ව විද්‍යාලයේ 3 වන / 4 වන වසරේ Comp Sci පන්තියක් ලෙස පිරිනමනු ලැබේ.

සාමාන්‍යයෙන් මෙහෙයුම් පද්ධති පිළිබඳ වඩා හොඳ අවබෝධයක් ලබා ගැනීමටත්, පවත්නා භාෂා සම්පාදනය කරන්නේ / ක්‍රියාත්මක කරන්නේ කෙසේද යන්නත් (එනම් දේශීයව (සී / සී ++), වීඑම් (ජාවා) හෝ පරිවර්තකයෙකු (පයිතන් / ජාවාස්ක්‍රිප්ට්) මගින් වඩාත් හොඳින් අවබෝධ කර ගැනීමට මම ඔබට තරයේ නිර්දේශ කරමි.

මගේ මෙහෙයුම් පද්ධති පා course මාලාවේ (2 වන වසරේදී) අපි ඒබ්‍රහම් සිල්බර්ෂාට්ස්, පීටර් බී. ගැල්වින්, ග්‍රෙග් ගැග්න් විසින් රචිත මෙහෙයුම් පද්ධති සංකල්ප පොත භාවිතා කළ බව මම විශ්වාස කරමි. මෙය මෙහෙයුම් පද්ධතියක එක් එක් අංගයන් පිළිබඳව ගැඹුරින් සොයා බැලීමට සමත් වූ විශිෂ්ට ග්‍රන්ථයකි - ටිකක් මිල අධික නමුත් එය වටින අතර පැරණි / පාවිච්චි කළ පිටපත් වටා පාවෙමින් තිබිය යුතුය.


මෙහෙයුම් පද්ධති සංකල්ප? සම්පාදකයෙකු තැනීම සඳහා අවශ්‍ය වන්නේ ඉතා සුළු ප්‍රමාණයකි. අවශ්‍ය වන්නේ මෘදුකාංග ගෘහ නිර්මාණ ශිල්පය පිළිබඳ අවබෝධයයි: ලිපින අවකාශ, තොග, නූල් (ඔහුට සම්පාදකයින් ඉගෙන ගැනීමට අවශ්‍ය නම් ඔහු සමාන්තරකරණය ගැන ඉගෙන ගනී, එහි අනාගතය).
ඉරා බැක්ස්ටර්

තමාට භාෂා නිර්මාණය සහ සම්පාදකයින් ඉගෙන ගැනීමට අවශ්‍ය බව පැවසූ වහාම ඔහු පැවසුවේ මෙහෙයුම් පද්ධති ගැන ඉගෙන ගැනීමට අවශ්‍ය බවය.
ඩේවිඩ් තෝර්න්ලි

Ra ඉරා - එකඟ විය. සම්පාදකයෙකු / භාෂාවක් තැනීම සඳහා මෙහෙයුම් පද්ධතිය අවබෝධ කර ගැනීම අවශ්‍ය බව මම කිසි විටෙකත් ප්‍රකාශ නොකළෙමි, එය පහසු ආරම්භක ස්ථානයක් විය හැකි බව සරලව පැහැදිලි කළෙමි. සෑම කෙනෙකුම ඔහුගේ ප්‍රශ්නයේ 'සම්පාදක' පැතිකඩ කෙරෙහි අවධානය යොමු කරන නමුත් මෙහෙයුම් පද්ධතිය සහ පුස්තකාල පිළිබඳව වඩා හොඳ අවබෝධයක් අවශ්‍ය බව ඔහු සඳහන් කළේය. අවුරුදු 15 ක් වයසැති ගෘහ නිර්මාණ ශිල්පය පිළිබඳ ඉගෙනීම සඳහා, මතක කළමනාකරණය, නූල් දැමීම, අගුලු දැමීම, අයි / ඕ යනාදිය තේරුම් ගැනීම වඩා ප්‍රයෝජනවත් වනු ඇත. යක් (IMHO) සමඟ ව්‍යාකරණයක් නිර්වචනය කරන්නේ කෙසේදැයි ඉගෙන ගැනීමට වඩා
ප්ලැෆොන්ඩ්

කණගාටුයි ... (ගොඩනැගීම?) මෙහෙයුම් පද්ධති ගැන ඉගෙන ගැනීමට අවශ්‍ය කාරණය මග හැරී ඇත. මගේ අදහස නම්: ඔහුට සම්පාදකයින් සඳහා විශාල OS දැනුමක් අවශ්‍ය නොවේ. ඇත්ත වශයෙන්ම, කිසියම් සාමූහික අරමුණක් සාක්ෂාත් කර ගැනීම සඳහා සම්පාදකයා සහ මෙහෙයුම් පද්ධතිය අන්තර්ක්‍රියා කරන ස්ථානය හැර, එය සම්පූර්ණයෙන්ම වෙනස් මාතෘකාවකි. (උදාහරණයක් ලෙස ගෝලීය වීඑම් එකක් සක්‍රීය කිරීම සඳහා යම් ආකාරයකින් ක්‍රියාකාරී ඇමතුම් තැනීමට මල්ටික්ස් හට එහි පීඑල් / 1 සම්පාදකයින් අවශ්‍ය විය).
ඉරා බැක්ස්ටර්

0

එය විශාල මාතෘකාවක් වන නමුත් විනෝදකාමී "පොතක් කියවන්න, ළමයෙක්" යනුවෙන් ඔබව තල්ලු කරනවා වෙනුවට ඒ වෙනුවට ඔබේ හිස එතීමට ඔබට උදව් කිරීමට මම ඔබට සතුටින් කරුණු දක්වන්නෙමි.

බොහෝ සම්පාදකයින් සහ / හෝ පරිවර්තකයන් මේ ආකාරයට ක්‍රියා කරයි:

ටෝකනයිස් කරන්න : කේත පෙළ පරිලෝකනය කර එය ටෝකන ලැයිස්තුවකට කඩා දමන්න.

ඔබට අවකාශය මත if (bar) foo += "a string";නූල බෙදිය නොහැකි නිසා මෙම පියවර ව්‍යාකූල විය හැකිය, එය ටෝකන 8 ක ලැයිස්තුවක් බව ඔබ හඳුනාගත යුතුය : WORD, OPEN_PAREN, WORD, CLOSE_PAREN, WORD, ASIGNMENT_ADD, STRING_LITERAL, TERMINATOR. ඔබට පෙනෙන පරිදි, ප්‍රභව කේතය අවකාශයන්හි බෙදීම ක්‍රියා නොකරනු ඇත, ඔබට සෑම අක්ෂරයක්ම අනුක්‍රමයක් ලෙස කියවිය යුතුය, එබැවින් ඔබට අක්ෂර සංඛ්‍යාවක් හමු වුවහොත් ඔබ අක්ෂරාංක නොවන අක්ෂරයකට පහර දෙන තෙක් අක්ෂර කියවමින් සිටියි. කියවීම යනු පසුව තවදුරටත් වර්ගීකරණය කළ යුතු වචනයකි. ඔබේ ටෝකනයිසර් කෙතරම් කැටිති දැයි ඔබටම තීරණය කළ හැකිය: එය "a string"STRING_LITERAL යනුවෙන් හැඳින්වෙන එක් ටෝකනයක් ලෙස ගිල දමන්නේද යන්න පසුව විග්‍රහ කිරීමටද, නැතහොත් එය දකින්නද?"a string" OPEN_QUOTE, UNPARSED_TEXT, CLOSE_QUOTE හෝ වෙනත් ඕනෑම දෙයක් ලෙස, මෙය ඔබ කේත කරන විට ඔබ විසින්ම තීරණය කළ යුතු බොහෝ තේරීම්වලින් එකකි.

ලීක්ස් : ඉතින් දැන් ඔබට ටෝකන ලැයිස්තුවක් තිබේ. WORD වැනි නොපැහැදිලි වර්ගීකරණයක් සහිත ඔබ සමහර ටෝකන ටැග් කර ඇති නිසා පළමු පාස් එකේදී ඔබ එක් එක් අක්ෂර මාලාවේ සන්දර්භය හඳුනා ගැනීමට උත්සාහ කිරීම සඳහා වැඩි උත්සාහයක් නොගනී. එබැවින් දැන් ඔබේ මූලාශ්‍ර ටෝකන ලැයිස්තුව නැවත කියවා ඔබේ භාෂාවේ මූල පද මත පදනම්ව වඩාත් නිශ්චිත ටෝකන වර්ගයක් සහිත එක් එක් අපැහැදිලි ටෝකන නැවත වර්ගීකරණය කරන්න. එබැවින් ඔබට "if" වැනි "WORD" සහ "if" වැනි සංකේත IF නම් විශේෂ වචන ලැයිස්තුවක් ඇත, එබැවින් ඔබ එම ටෝකනයේ සංකේත වර්ගය WORD සිට IF දක්වා වෙනස් කරයි, සහ ඔබේ විශේෂ වචන ලැයිස්තුවේ නොමැති ඕනෑම වචනයක් , WORD foo වැනි, හඳුනාගැනීමක් වේ.

විග්‍රහ කරන්න : දැන් ඔබ if (bar) foo += "a string";මේ ආකාරයට පෙනෙන ලීක්ස් ටෝකන ලැයිස්තුවක් හරවා ඇත: IF OPEN_PAREN IDENTIFER CLOSE_PAREN IDENTIFIER ASIGN_ADD STRING_LITERAL TERMINATOR. පියවර වන්නේ ටෝකනවල අනුපිළිවෙල ප්‍රකාශ ලෙස හඳුනා ගැනීමයි. මෙය විග්‍රහ කිරීමකි. ඔබ මෙය කරන්නේ ව්‍යාකරණ භාවිතා කිරීමෙනි:

ප්‍රකාශය: = ASIGN_EXPRESSION | IF_STATEMENT

IF_STATEMENT: = IF, PAREN_EXPRESSION, STATEMENT

ASIGN_EXPRESSION: = IDENTIFIER, ASIGN_OP, VALUE

PAREN_EXPRESSSION: = OPEN_PAREN, VALUE, CLOSE_PAREN

අගය: = හැඳුනුම්පත | STRING_LITERAL | PAREN_EXPRESSION

ASIGN_OP: = EQUAL | ASIGN_ADD | ASIGN_SUBTRACT | ASIGN_MULT

"|" භාවිතා කරන නිෂ්පාදන පද අතර අර්ථය “මේවායින් ඕනෑම එකක් ගැලපීම”, එය පද අතර කොමාව තිබේ නම් එහි තේරුම “මෙම පද අනුපිළිවෙලට ගැලපීම” යන්නයි.

ඔබ මෙය භාවිතා කරන්නේ කෙසේද? පළමු ටෝකනයෙන් පටන් ගෙන, ඔබේ නිෂ්පාදන සමඟ ඔබේ ටෝකන අනුක්‍රමය ගැලපීමට උත්සාහ කරන්න. එබැවින් පළමුව ඔබ ඔබේ ටෝකන් ලැයිස්තුව STATEMENT සමඟ ගැලපීමට උත්සාහ කරයි, එබැවින් ඔබ STATEMENT සඳහා වන රීතිය කියවන අතර එය "STATEMENT එකක් ASIGN_EXPRESSION හෝ IF_STATEMENT" යැයි පවසන බැවින් ඔබ මුලින් ASIGN_EXPRESSION හා සැසඳීමට උත්සාහ කරයි, එබැවින් ඔබ ASIGN_EXPRESSION සඳහා ව්‍යාකරණ රීතිය සොයා බලන්න. එය පවසන්නේ "ASIGN_EXPRESSION යනු ASIGN_OP හා පසුව VALUE ය, එබැවින් ඔබ IDENTIFIER සඳහා ව්‍යාකරණ රීතිය සොයා බලන අතර IDENTIFIER සඳහා ව්‍යාකරණ රීතියක් නොමැති බව ඔබට පෙනේ, එබැවින් IDENTIFIER" පර්යන්තයක් "යන්නෙන් තවදුරටත් අවශ්‍ය නොවේ එය ගැලපීම සඳහා විග්‍රහ කිරීම මඟින් ඔබට එය ඔබගේ ටෝකනය සමඟ කෙලින්ම ගැලපීමට උත්සාහ කළ හැකිය.නමුත් ඔබේ පළමු ප්‍රභව ටෝකනය IF වේ, සහ IF හැඳුනුම්පතක් හා සමාන නොවේ නම් තරගය අසාර්ථක විය. දැන් මොකද? ඔබ නැවත STATEMENT රීතිය වෙත ගොස් ඊළඟ වාරය ගැලපීමට උත්සාහ කරන්න: IF_STATEMENT. ඔබ සොයන්නේ IF_STATEMENT, එය ආරම්භ වන්නේ IF, බැලීමේ IF, IF ටර්මිනලයක් නම්, ඔබේ පළමු ටෝකනය සමඟ ටර්මිනලය සංසන්දනය කරන්න, IF ටෝකන් ගැලපීම්, නියමයි ඉදිරියට යන්න, ඊළඟ පදය PAREN_EXPRESSION, බලන්න PAREN_EXPRESSION, එය පර්යන්තයක් නොවේ, එය පළමු පදය කුමක්ද, PAREN_EXPRESSION ආරම්භ වන්නේ OPEN_PAREN, OPEN_PAREN බලන්න, එය පර්යන්තයක්, ඔබේ ඊළඟ ටෝකනයට OPEN_PAREN ගැලපෙන්න, එය ගැලපේ, සහ යනාදිය.

මෙම පියවරට ප්‍රවේශ වීමට ඇති පහසුම ක්‍රමය නම්, ඔබට ගැලපීමට උත්සාහ කරන ප්‍රභව කේත ටෝකනය සහ ඔබ එය ගැලපීමට උත්සාහ කරන ව්‍යාකරණ පදය පසුකර යන පාර්ස් () නම් ශ්‍රිතයක් ඇත. ව්‍යාකරණ පදය පර්යන්තයක් නොවේ නම් ඔබ නැවත යොමු කරයි: ඔබ නැවත විග්‍රහ කරන්නේ () නැවත එය එකම ප්‍රභව ටෝකනය පසු කර මෙම ව්‍යාකරණ රීතියේ පළමු පදයයි. මේ නිසා එය "පුනරාවර්තන සම්භවයක් ඇති පාර්සර්" ලෙස හැඳින්වේ. විග්‍රහ () ශ්‍රිතය ප්‍රභව ටෝකන කියවීමේදී ඔබගේ වර්තමාන තත්වය නැවත ලබා දෙයි (හෝ වෙනස් කරයි), එය අත්‍යවශ්‍යයෙන්ම ගැලපෙන අනුපිළිවෙලෙහි අවසාන ටෝකනය පසු කරයි, ඔබ ඊළඟ ඇමතුම දිගටම කරගෙන යයි () සිට විග්‍රහ කරන්න.

ASIGN_EXPRESSION වැනි නිශ්පාදනයකට ගැලපෙන සෑම අවස්ථාවකම () ඔබ එම කේත කොටස නියෝජනය කරන ව්‍යුහයක් නිර්මාණය කරයි. මෙම ව්‍යුහයේ මුල් ප්‍රභව ටෝකන සඳහා යොමු කිරීම් අඩංගු වේ. ඔබ මෙම ව්‍යුහයන්ගේ ලැයිස්තුවක් තැනීමට පටන් ගනී. අපි මෙම සම්පූර්ණ ව්‍යුහය වියුක්ත සින්ටැක්ස් ගස (AST) ලෙස හඳුන්වමු

සම්පාදනය කිරීම සහ / හෝ ක්‍රියාත්මක කිරීම : ඔබේ ව්‍යාකරණයේ ඇතැම් නිෂ්පාදන සඳහා ඔබ හසුරුවන කාර්යයන් නිර්මාණය කර ඇති අතර ඒඑස්ටී ව්‍යුහයක් ලබා දෙන්නේ නම් එය ඒඑස්ටී කැබැල්ල සම්පාදනය කිරීම හෝ ක්‍රියාත්මක කිරීම සිදු කරයි.

එබැවින් ASIGN_ADD වර්ගය ඇති ඔබේ AST හි කොටස දෙස බලමු. එබැවින් පරිවර්තකයෙකු ලෙස ඔබට ASIGN_ADD_execute () ශ්‍රිතයක් ඇත. මෙම ශ්‍රිතය විග්‍රහ කිරීමේ ගසට අනුරූප වන AST හි කොටසක් ලෙස සම්මත වේfoo += "a string" , එබැවින් මෙම ශ්‍රිතය එම ව්‍යුහය දෙස බලන අතර ව්‍යුහයේ පළමු පදය IDENTIFIER විය යුතු බව දන්නා අතර දෙවන පදය VALUE වේ, එබැවින් ASIGN_ADD_execute () මතකයේ තක්සේරු කළ අගය නිරූපණය කරන වස්තුවක් නැවත ලබා දෙන VALUE_eval () ශ්‍රිතයක් වෙත VALUE පදය යවයි, ඉන්පසු ASIGN_ADD_execute () ඔබේ විචල්‍යතා වගුවේ “foo” සොයා බලයි, සහ eval_value () මගින් ආපසු ලබා දුන් ඕනෑම දෙයකට යොමු කිරීමක් ගබඩා කරයි. ශ්‍රිතය.

එය පරිවර්තකයෙකි. සම්පාදකයකුට ඒඑස්ටී ක්‍රියාත්මක කිරීම වෙනුවට ඒඑස්ටී බයිට් කේතයට හෝ යන්ත්‍ර කේතයට පරිවර්ථනය කරයි.

පියවර 1 සිට 3 දක්වා සහ 4 ක් පමණ ෆ්ලෙක්ස් සහ බයිසන් වැනි මෙවලම් භාවිතයෙන් පහසු කර ගත හැකිය. (aka. Lex සහ Yacc) නමුත් මුල සිටම පරිවර්ථකයෙකු ලිවීම ඕනෑම ක්‍රමලේඛකයෙකුට ලබා ගත හැකි වඩාත්ම බලගතු ව්‍යායාමය විය හැකිය. මෙය සමුළුවෙන් පසුව අනෙක් සියලුම ක්‍රමලේඛන අභියෝග ඉතා සුළු බව පෙනේ.

මගේ අවවාදය කුඩා වේ: ඉතා කුඩා භාෂාවක්, ඉතා කුඩා ව්‍යාකරණයක් ඇති අතර සරල ප්‍රකාශ කිහිපයක් විග්‍රහ කර ක්‍රියාත්මක කිරීමට උත්සාහ කරන්න, ඉන්පසු එතැන් සිට වර්ධනය වන්න.

මේවා කියවා, වාසනාව!

http://www.iro.umontreal.ca/~felipe/IFT2030-Automne2002/Complements/tinyc.c

http://en.wikipedia.org/wiki/Recursive_descent_parser


2
මිනිසුන් සම්පාදනය කිරීම ගැන සිතන විට ඔබ සම්භාව්‍ය වැරැද්දක් ලෙස ඔබ සලකයි: එනම් ගැටලුව විග්‍රහ කිරීම යැයි විශ්වාස කිරීමයි. විග්‍රහ කිරීම තාක්‍ෂණිකව පහසුය; එය කිරීම සඳහා විශිෂ්ට තාක්ෂණයන් ඇත. සම්පාදනය කිරීමේ දුෂ්කර කොටස වන්නේ අර්ථකථන විශ්ලේෂණය, ඉහළ සහ පහළ මට්ටමේ වැඩසටහන් නිරූපණය ප්‍රශස්ත කිරීම සහ කේත උත්පාදනය කිරීම, මේ දිනවල PARALLEL කේතය කෙරෙහි වැඩි අවධානයක් යොමු කිරීමයි. ඔබේ පිළිතුරෙන් ඔබ මෙය සුළු කොට සලකයි: "සම්පාදකයෙකුට AST බයිට් කේතයට පරිවර්තනය කිරීම සඳහා හසුරුවන කාර්යයන් ඇත". වසර 50 ක් ඉක්මවා ගිය සම්පාදක න්‍යාය සහ ඉංජිනේරු විද්‍යාව එහි සැඟවී තිබේ.
ඉරා බැක්ස්ටර්

0

පරිගණක ක්ෂේත්‍රය සංකීර්ණ වන්නේ එයට බොහෝ දිශාවන්හි පරිණාමය වීමට කාලය ඇති බැවිනි. එහි හදවතේ එය ගණනය කරන යන්ත්‍ර ගැන පමණි.

මගේ ප්‍රියතම ඉතා මූලික පරිගණකය වන්නේ හැරී පෝටර්ගේ රිලේ පරිගණකයයි . පරිගණකයක් මූලික මට්ටමින් ක්‍රියා කරන ආකාරය පිළිබඳ රසයක් එය ලබා දෙයි. එවිට ඔබට භාෂා සහ මෙහෙයුම් පද්ධති වැනි දේවල් අවශ්‍ය වන්නේ මන්දැයි වටහා ගැනීමට පටන් ගත හැකිය.

කාරණය නම්, අවශ්‍ය දේ තේරුම් නොගෙන කිසිවක් තේරුම් ගැනීම අපහසුය . වාසනාව, දේවල් පමණක් කියවන්න එපා. කරන්න දේවල්.



-1

තවත් හොඳ හඳුන්වාදීමේ ග්‍රන්ථයක් වන්නේ 1986 සිට එන්. ඊබීඑන්එෆ් අංකනයෙහි විග්‍රහ කිරීම සඳහා ව්‍යාකරණයේ කියවන විග්‍රහයක් ලිවිය යුතු ආකාරය ද එය පෙන්වයි. පොත ජර්මානු භාෂාවෙන් ඇති නමුත් මම සාරාංශයක් ලියා කේතය අභ්‍යාසයක් ලෙස පයිතන්ට පරිවර්තනය කළෙමි, http://www.d12k.org/cmplr/w86/intro.html බලන්න .


-1

ක්‍රමලේඛන භාෂාවල සාරය අවබෝධ කර ගැනීමට ඔබ කැමති නම්, සංකල්ප සහ ඒවා ක්‍රියාත්මක කිරීම. එය ඔබේම භාෂාවේ සැලසුමට ද උපකාරී වනු ඇත.


-1

ඔබට සැබවින්ම සම්පාදකයා කෙරෙහි උනන්දුවක් ඇත්නම් සහ මීට පෙර කිසි දිනෙක නොකළේ නම්, ගණිත සූත්‍ර ගණනය කිරීම සඳහා කැල්කියුලේටරයක් ​​සැලසුම් කිරීමෙන් ඔබට ආරම්භ කළ හැකිය (එරික් සඳහන් කළ පරිදි ඩීඑස්එල් වර්ගයකි). මේ ආකාරයේ සම්පාදකයෙකු සඳහා ඔබ සලකා බැලිය යුතු බොහෝ අංශ තිබේ:

  • අවසර ලත් අංක
  • අවසර ලත් ක්‍රියාකරුවන්
  • ක්රියාකරුගේ ප්රමුඛතා
  • සින්ටැක්ස් වලංගුකරණය
  • විචල්ය බැලීමේ යාන්ත්රණය
  • චක්රය අනාවරණය කිරීම
  • ප්‍රශස්තිකරණය

උදාහරණයක් ලෙස, ඔබට පහත සූත්‍ර ඇත, ඔබේ කැල්කියුලේටරය x හි අගය ගණනය කිරීමට හැකි විය යුතුය:

a = 1
b = 2
c = a + b
d = (3 + b) * c
x = a - d / b

එය ආරම්භ කිරීම අතිශයින්ම දුෂ්කර සම්පාදකයෙකු නොවේ, නමුත් ඔබට සම්පාදකයෙකු යනු කුමක්ද යන්න පිළිබඳ මූලික අදහස් කිහිපයක් ගැන සිතීමටත්, ඔබේ ක්‍රමලේඛන කුසලතා වැඩි දියුණු කිරීමටත්, ඔබේ කේතයේ ගුණාත්මකභාවය පාලනය කිරීමටත් ඔබට හැකි වේ (මෙය සැබවින්ම පරිපූර්ණ ගැටළුවක් ටෙස්ට් ඩ්‍රයිවින් ඩිවලොප්මන්ට් මෘදුකාංගයේ ගුණාත්මකභාවය වැඩි දියුණු කිරීම සඳහා ටීඩීඩී අයදුම් කළ හැකිය).

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.