1. Lexer (tokenizer) - matndan bo'laklarni ajratish qismi. Masalan:
if a>5 then b=a
matnini
if - identifikator
a - identifikator
> - operator
5 - son
then - identifikator
b - identifikator
= - operator
a - identifikator
qilib bo'laklarga ajratadi.
2. Parser - yuqoridagi bo'laklardan qoida asosida sintaktik daraxt hosil qiladi, masalan:
if (> (a, 5), = (b, a))
kabi
agar, toki, takror, borish, kiritish, chiqarish, chaqirish, qismdastur, massiv va uzgaruvchilar. Manimcha shulardan har qanday algoritmni yechsa buladi.
Any ideas?
bayt-kodga kompilyasiya qilinadigan bo'lyapti. Kompilyator+VM+IDE ni VB da qilyapman )) lekin VM qismida assemblerdan ham foydalanyapman.
Til oddiy prosedural, vb va c ga o'xshash sintaksli
xudo xoxlasa 1-2 xaftada kuramiz.
1. Parsing uchun tayyor parserdan foydalandim (sintaktik daraxt tuzish un).
2. Translator (dastur kodidan, aniqrog'i sintaktik daraxtdan byte kodga ugirish) ni Visual Basicda yozib bo'ldim.
3. IDE ham Visual Basicda, asosiy ishi bo'ldi.
4. Faqatgina VM qoldi.
masalan? VM oddiy dasturiy kompyuter yoki qurilma. 2 hil bulishi mumkin: stekli va registrli. Oraliq qiymatlarni saqlashda stek yoki registrdan foydalanishi mumkin. Bundan tashqari biror kompyuter yoki qurilmani emulyasiya qilishi yoki uzingiz o'ylab topgan buyruqlarni bajarishi mumkin. Bu buyruqlar odatda baytkod yoki p-kod (manimcha psevdo kod) deyiladi. Nega dastur kodi albatta baytkodga ugirilib bajariladi degan savolga javob: baytkod matnli koddan soddaroq va bajarilishi tezroq buladi. Bir hilgi kompilyatorlar dastur matnini umuman baytkod yoki mashina kodiga ugirilmasdan ishlatadi (bevosita interpretasiya). Bir hilgisi baytkodga ugirib, uni bajarish vaqtida qadamlab baytkodni mashina kodiga ugirib bajartiradi (JIT kompilyasiya, mas. CLR, ya'ni .net platforma). Baytkod qanday buladi? Masalan
s = 1+2*15-6/2
kod baytkodda bunday bulishi mumkin
push 1
push 2
push 15
mul
add
push 6
push 2
div
sub
bu stek asosidagi baytkod. Push, mul, div, add, sub lar instruksiya...Ещёmasalan? VM oddiy dasturiy kompyuter yoki qurilma. 2 hil bulishi mumkin: stekli va registrli. Oraliq qiymatlarni saqlashda stek yoki registrdan foydalanishi mumkin. Bundan tashqari biror kompyuter yoki qurilmani emulyasiya qilishi yoki uzingiz o'ylab topgan buyruqlarni bajarishi mumkin. Bu buyruqlar odatda baytkod yoki p-kod (manimcha psevdo kod) deyiladi. Nega dastur kodi albatta baytkodga ugirilib bajariladi degan savolga javob: baytkod matnli koddan soddaroq va bajarilishi tezroq buladi. Bir hilgi kompilyatorlar dastur matnini umuman baytkod yoki mashina kodiga ugirilmasdan ishlatadi (bevosita interpretasiya). Bir hilgisi baytkodga ugirib, uni bajarish vaqtida qadamlab baytkodni mashina kodiga ugirib bajartiradi (JIT kompilyasiya, mas. CLR, ya'ni .net platforma). Baytkod qanday buladi? Masalan
s = 1+2*15-6/2
kod baytkodda bunday bulishi mumkin
push 1
push 2
push 15
mul
add
push 6
push 2
div
sub
bu stek asosidagi baytkod. Push, mul, div, add, sub lar instruksiyalar (bu tushunish un matn kurinishida, hammasini uzini kodi bor)
push - stek chuqqisiga qiymat quyadi. Add - stekni tepasidagi 2 ta elementni olib ularni qushadi va natijani yana stek tepasiga quyadi
vm shu oddiy buyruqlarni bajarsa buldi. Faqat shu buyruqlar emasu, stekdagi qiymatni uzgaruvchiga yozish, stekka uzg.qiymatini quyish, agar stek tepasidagi qiymat false/true bulganda berilgan adresga utish va shunga uxshash buyruqlar ham bdi.
men kuchli dasturchi emasmanu lekin sintaksisini assembler tilidek qisqa qilinglar masalan men assemblerga qiziqamanu lekin 6rganiw uchun hech narsa y6q sizlar wu tilni uzbekchasiga 6girib, q6llanmasi bilan ommaga taqdim qilsaylar juda savobli iw b6lardi
Мы используем cookie-файлы, чтобы улучшить сервисы для вас. Если ваш возраст менее 13 лет, настроить cookie-файлы должен ваш законный представитель. Больше информации
Комментарии 101
if a>5 then b=a
matnini
if - identifikator
a - identifikator
> - operator
5 - son
then - identifikator
b - identifikator
= - operator
a - identifikator
qilib bo'laklarga ajratadi.
2. Parser - yuqoridagi bo'laklardan qoida asosida sintaktik daraxt hosil qiladi, masalan:
if (> (a, 5), = (b, a))
kabi
Any ideas?
Til oddiy prosedural, vb va c ga o'xshash sintaksli
1. Parsing uchun tayyor parserdan foydalandim (sintaktik daraxt tuzish un).
2. Translator (dastur kodidan, aniqrog'i sintaktik daraxtdan byte kodga ugirish) ni Visual Basicda yozib bo'ldim.
3. IDE ham Visual Basicda, asosiy ishi bo'ldi.
4. Faqatgina VM qoldi.
s = 1+2*15-6/2
kod baytkodda bunday bulishi mumkin
push 1
push 2
push 15
mul
add
push 6
push 2
div
sub
bu stek asosidagi baytkod. Push, mul, div, add, sub lar instruksiya...Ещёmasalan? VM oddiy dasturiy kompyuter yoki qurilma. 2 hil bulishi mumkin: stekli va registrli. Oraliq qiymatlarni saqlashda stek yoki registrdan foydalanishi mumkin. Bundan tashqari biror kompyuter yoki qurilmani emulyasiya qilishi yoki uzingiz o'ylab topgan buyruqlarni bajarishi mumkin. Bu buyruqlar odatda baytkod yoki p-kod (manimcha psevdo kod) deyiladi. Nega dastur kodi albatta baytkodga ugirilib bajariladi degan savolga javob: baytkod matnli koddan soddaroq va bajarilishi tezroq buladi. Bir hilgi kompilyatorlar dastur matnini umuman baytkod yoki mashina kodiga ugirilmasdan ishlatadi (bevosita interpretasiya). Bir hilgisi baytkodga ugirib, uni bajarish vaqtida qadamlab baytkodni mashina kodiga ugirib bajartiradi (JIT kompilyasiya, mas. CLR, ya'ni .net platforma). Baytkod qanday buladi? Masalan
s = 1+2*15-6/2
kod baytkodda bunday bulishi mumkin
push 1
push 2
push 15
mul
add
push 6
push 2
div
sub
bu stek asosidagi baytkod. Push, mul, div, add, sub lar instruksiyalar (bu tushunish un matn kurinishida, hammasini uzini kodi bor)
push - stek chuqqisiga qiymat quyadi. Add - stekni tepasidagi 2 ta elementni olib ularni qushadi va natijani yana stek tepasiga quyadi
1) 1 // push 1
2) 1, 2 // push 2
3) 1, 2, 15 // push 15
4) 1, 30 // mul
5) 31 // add
6) 31, 6 // push 6
7) 31, 6, 2 // push 2
8) 31, 3 // div
9) 28 // sub
Unversal til bo'lsa yaxshi bo'lardi masalan python,ruby kabi
Masalan:
kritish("Salom bu uzbek dasturlash tili!!!"
a=1;
b=2;
kritish(a,b)
tamom
shunday