հաւէս յօդուած ա սա շատ՝ https://www.joelonsoftware.com/2001/12/11/back-to-basics/
իսկ օբերոնում վիրտը որոշել ա հրաժարուել պասկալական տողերից, ու կիրառել զրօյով աւարտուող տողեր։
սակայն, էդ տողերով կարիք չկայ միշտ վազել չափն իմանալու համար։ առանձին դաշտ էլ պէտք չի օգտագործել ու յիշողութեան մէջ մի տեղ պահել չափսը՝ քոմփայլերը գիտի տողի երկարութիւնը։
ու քոմփայլ թայմ թեստ կարող ա անել։ դիցուք վերցնենք էս ելատեքստը՝
MODULE tst;
IMPORT Out;
VAR i: SHORTINT;
str: ARRAY 1024 OF CHAR;
BEGIN
FOR i := 0 TO LEN(str) DO
Out.Int(i, 0); Out.Ln
END;
END tst.
այն քոմփայլ չի լինի՝
[2020-09-02 16:00:20] $ voc -m tst.Mod
tst.Mod Compiling tst.
9: FOR i := 0 TO LEN(str) DO
^
pos 102 err 113 incompatible assignment
Module compilation failed.
[2020-09-02 16:00:21] $
voc֊ը որ դէպի C ա թարգմանում սորսը, շատ լաւ ա պատկերելու համար։ եթէ մենք ունենք՝
str: ARRAY 16 OF CHAR;
ապա ելքային C կոդը կը լինի՝
static CHAR tst_str[16];
միայն դա։
իսկ
FOR i := 0 TO LEN(str) DO
կը թարգմանուի որպէս՝
tst_i = 0;
while (tst_i <= 16) {
Երբ մենք գրում ենք տողի հետ աշխատող ֆունկցիա, մենք կարող ենք չիմանալ փոխանցուող տողի երկարութիւնը՝
MODULE tst2;
PROCEDURE addStrs(VAR a, b: ARRAY OF CHAR);
BEGIN
(* do smth useful here *)
END addStrs;
PROCEDURE test*;
VAR
s0: ARRAY 32 OF CHAR;
s1: ARRAY 64 OF CHAR;
BEGIN
addStrs(s0, s1);
END test;
END tst2.
եւ ապա սի կոդը կը լինի՝
static void tst2_addStrs (CHAR *a, ADDRESS a__len, CHAR *b, ADDRESS b__len)
{
/* here we think we can do smth useful */
}
void tst2_test (void)
{
CHAR s0[32];
CHAR s1[64];
tst2_addStrs((void*)s0, 32, (void*)s1, 64);
}
այսինքն՝ ֆունկցիան ստանում ա նաեւ տողի երկարութիւնը։ ու եթէ անել LEN(a)
անմիջապէս՝ առանց ոչ մի հաշուարկ՝ ստանում ես տողի երկարութիւնը։
ապա ինչպէ՞ս են աշխատում դինամիկ տողերը։
MODULE tst3;
PROCEDURE addStrs(VAR a, b: ARRAY OF CHAR);
BEGIN
(* do smth useful here *)
END addStrs;
PROCEDURE test*(i: INTEGER);
VAR
s: ARRAY 32 OF CHAR;
ps: POINTER TO ARRAY OF CHAR;
BEGIN
NEW(ps, i);
addStrs(s, ps^);
END test;
END tst3.
ունենք մի հատ ստատիկ տող՝ s
ու մի հատ դինամիկ տողի ցուցիչ՝ ps
։
ps
֊ի չափսը կը ստանանք որպէս ֆունկցիայի արգումենտ՝ էս պահին մեզ անյայտ ա։
առաջին ֆունկցիան մնում ա անփոփոխ, երկրորդը թարգմանւում ա սէնց՝
static void tst3_addStrs (CHAR *a, ADDRESS a__len, CHAR *b, ADDRESS b__len)
{
/* do smth useful here */
}
void tst3_test (INT16 i)
{
CHAR s[32];
struct {
ADDRESS len[1];
CHAR data[1];
} *ps = NIL;
ps = __NEWARR(NIL, 1, 1, 1, 1, ((ADDRESS)(i)));
tst3_addStrs((void*)s, 32, (void*)ps->data, ps->len[0]);
}
_NEWARR
֊ն արդէն մի քիչ բարդ ֆունկցիա ա, որը ռանթայմի մաս ա։
բայց ընդհանուր առմամբ պարզ ա ինչ ա անում՝ հիփ֊ի մէջ ալոքէյթ ա անելու տող, եւ մեր ստացած ցուցիչն արդէն struct֊ի ա, որն ունի data դաշտ եւ len դաշտ։
սա ռանթայմ տեղեկատւութիւն ա, ու այս դէպքում արդէն մեզ պէտք ա պահել առանձին դաշտ տողի երկարութեան համար։
ու տէնց։
#օբերոն #ծրագրաւորում #տող #տողեր #պասկալ #սի #վիշապ #իրականացում #կազմարկում #կոմպիլյատոր #կոմպիլեատոր #կազմարկիչ
գրիր քո լիսպը՝ լաւ գիրք առցանց՝ http://www.buildyourownlisp.com/ #ծրագրաւորում #լիսպ #սի #կոմպիլյատոր #գիրք
կոմպիլյատորի լաւ կայքը ինչ տեսք ունի։
#կայք #կոմպիլյատոր #էկրանահան #օդապարիկ #ամրոց #սքուիք #սմոլթոք #ծրագրաւորում
c եւ c++ պատմութիւն՝ https://vimeo.com/132192250
#ծրագրաւորում #կոմպիլյատոր #սի #ծրագրաւորման_լեզուներ #լեզու
սպանիչ պատմութիւն է, ինչպէս մարդը գրել է սի կոմպիլյատոր քառասուն օրուայ մէջ՝ http://www.sigbus.info/how-i-wrote-a-self-hosting-c-compiler-in-40-days.html
#ծրագրաւորում #կոմպիլյատոր #սի #ծրագրաւորման_լեզուներ #լեզու
գոու֊ն ընչդէմ ռասթ֊ի ընդդէմ սուիֆթ֊ի՝ https://grigio.org/go-vs-node-vs-rust-vs-swift/
#հետազօտութիւն #ծրագրաւորում #կոմպիլյատոր #թեստ #ծրագրաւորման_լեզուներ #գոու #ռասթ #սուիֆթ
ահա, Վիրտի PICL լեզուի կոմպիլյատորը, որ նախատեսուած է PI16F84 միկրոկոնտրոլերներ ծրագրաւորելու համար, կարողացայ տեղափոխել Լինուքս, աշխատեցնել, եւ կոմպիլյացիա անել մի քանի թեստ։
#կոմպիլյատոր #էկրանահան #ծրագրաւորում #լինուքս #երկաթ #ծրագրաւորման_լեզուներ #միկրոկոնտրոլեր
http://www.astrobe.com/forum/viewtopic.php?f=4&t=448 այս մրցոյթը ցոյց է տալիս որ իրենց կոմպիլյատորը վատ կոդ է գեներացնում։ #կոմպիլյատոր
մի քիչ լաւացրի ու աւելացրի ԿարդայԻնդ֊ը։ ահա։ ։Ճ
https://github.com/norayr/rrro
#օբերոն #աւբերոն #կոմպիլյատոր #հաւէս
added more beautiful error/warning messages in voc
@{ Փրչրթան✱ Թանաքեան ; norayr@spyurk.am} Չրք 07 Մայ 2014 08:21:34 AMT
աւելացրի սիրունիկ սխալների զեկոյց։
#վօկ #վիշապ֊օբերոն #կոմպիլյատոր #էկրանահան #կոնսոլ #նոչ #ուտենց
#voc #vishap-oberon #xterm #console #noch #screenshot #wmaker
աւելացրի սիրունիկ սխալների զեկոյց։
#վօկ #վիշապ֊օբերոն #կոմպիլյատոր #էկրանահան #կոնսոլ #նոչ #ուտենց
I have published Vishap Oberon compiler
#vishap #voc #oberon #oberon-2 #compiler #ofront #pascal #modula-2 #fork #github #compilers #վիշապ #օբերոն #կոմպիլյատոր #պասկալ #մոդուլա֊2 #ծրագրավորում