ლექცია#
ჩვენი პროგრამირების ენა “ქუბიტი”#
გამარჯობა, ლექციის მიმოხილვა#
გამარჯობა მეგობრებო, ეს უკვე მე-ექვსე (6‼) ლექციაა. იმედი გვაქვს, წინა ხუთი უკვე ნახეთ.
დღეს ძალიან საინტერესო გზას გავივლით — შევქმნით ჩვენს საკუთარ პროგრამირების ენას!
რა არის საერთოდ „ენა“?#
ფორმალური ენა — სიმბოლოების სტრიქონების (სიტყვების) სიმრავლე,
რომლის ყველა სიმბოლო აღებულია ამ ენის ანბანიდან.
მაგალითი ანბანებისა:
{a, b} // ორი სიმბოლო
{0, 1} // ბიტური
{x, =, +, ;} // პროგრამული
ამ სიმბოლოებით ვაწყობთ სტრიქონებს (aab, abba, …),
მაგრამ გრამატიკის გარეშე ისინი ჯერ კიდევ უბრალო კომბინაციებია — არა ენის „სიტყვები“.
Context‑Free Grammar (CFG)#
CFG პროგრამირების ენებისთვის საკმარისია. იგი მოიცავს:
საწყის სიმბოლოს (Start)
არა‑საბოლოო სიმბოლოებს (Non‑terminal)
საბოლოო სიმბოლოებს (Terminal)
წარმოების წესებს (Productions)
რომელი ფერი რომელ კომპონენტს შეესაბამება?#
ჯერ შენით დაფიქრდი და შემდეგ ვიდეოში გადაამოწმე თუ სწორად გამოიცანი!
„ქუბიტი“ — ენის შესაძლებლობები#
არითმეტიკა:
5 + 3 * 2ცვლადები:
sum = 5 + 2ბეჭდვა:
print(sum)ანprint(10)
გრამატიკა (სრული ვერსია)#
<Program> ::= <StatementList>
<StatementList> ::= <Statement> | <StatementList> <Statement>
<Statement> ::= <AssignStmt> | <PrintStmt>
<AssignStmt> ::= <Identifier> "=" <Expression> ";"
<PrintStmt> ::= "print" "(" <Expression> ")" ";"
<Expression> ::= <Term>
| <Expression> "+" <Term>
| <Expression> "-" <Term>
<Term> ::= <Factor>
| <Term> "*" <Factor>
| <Term> "/" <Factor>
<Factor> ::= <Number>
| <Identifier>
| "(" <Expression> ")"
<Identifier> ::= [A-Za-z][A-Za-z0-9]*
<Number> ::= [0-9]+
და ქართულად გამოდის:
პრიორიტეტი#
ჯერ
*//, შემდეგ+/-.
მაგალითი — 2 + 3 * 4#
ფაზები (ქვემოდან ზემოთ):
3 * 4 = 12
2 + 12 = 14
Compile‑time vs Run‑time#
სინტაქსი — ენას სწორი სტრუქტურა;
სემანტიკაში — რას ნიშნავს ეს სტრიქონი.
a = 5 / 0; // სინტაქსურად სწორია, მაგრამ 0‑ზე გაყოფა run‑time‑ზე აფეთქდება
პატარა კომპილატორი და გამოგონილი პროცესორი#
32 რეგისტრი —
R1 … R32ბრძანებები:
LOAD,ADD,SUB,MUL,DIV,STORE,PRINT,HALT
subscribers = 775 + 225;
print(subscribers);
თარგმნა 👇
LOAD R1 775
LOAD R2 225
ADD R3 R1 R2
STORE subscribers R3
PRINT subscribers
HALT
რეგისტრების ოპტიმიზაცია — (2 + 3) * (4 + 5)#
გულუბრყვილო (Naive) — 7 რეგისტრი
ჭკვიანური — 3 რეგისტრი
; ოპტიმიზებული
LOAD R1 2
LOAD R2 3
ADD R1 R1 R2 ; R1 = 5
LOAD R2 4
LOAD R3 5
ADD R2 R2 R3 ; R2 = 9
MUL R1 R1 R2 ; R1 = 45
შეჯამება#
ამ ლექციაში:
ავაწყეთ ჩვენი პროგრამირების ენა
გავაფორმეთ მისი CFG
ვნახეთ, როგორ აკეთებს კომპილატორი წარმოების ხეს
და როგორ ითარგმნება კოდი პროცესორის ინსტრუქციებად
მადლობა ყურადღებისთვის!
მოიწონეთ, გამოიწერეთ და ნუ გამოტოვებთ შემდეგ ლექციას.
დროებით! 🚀
გაითვალისწინეთ, ეს მხოლოდ მოკლე შეჯამებაა, სრული ვერსია ნახეთ ვიდეოში <3