Creați compilatorul pe bază vizuală!

Da, într-adevăr, încercăm acum să creăm limbaj de programare standard prin mijloace standard! Nu fi surprins, dar nu este atât de dificilă cum pare la prima vedere. Desigur, înainte de crearea acestui compilator este departe, dar acesta este doar un exemplu și totul este limitat doar de imaginația și priceperea voastră.
Să începem. Mai întâi, să ne sunăm într-un fel. De exemplu, limbajul de programare simplu - SPL abreviat. Orice limbaj de programare este format din trei părți:
a) regulile de sintaxă;
b) operatori;
c) compilatorul propriu-zis.
Să începem cu a. Putem seta orice reguli de sintaxă. Lasă-l să fie
vor exista aceleași reguli ca în BASIC, dar cu sintaxa rusă care este în loc de:
Dacă x = 0 Apoi MsgBox "Eroare"
vei scrie vrednic:
Dacă ix = 0 Atunci mesajul "Eroare"
nu este mare?
Punctul b. Ei bine, dacă am ales BASIC, atunci operatorii vor fi aceiași ca în BASIC, dar în limba rusă, ceea ce ați văzut deja în exemplul de mai sus.
În cele din urmă, cea mai importantă și mai interesantă este implementarea limbii, adică crearea unui compilator.
Deschidem Visual Basic și creăm un nou proiect - Standard EXE.
Înainte de noi este o formă goală. Să începem. Modificați câteva proprietăți ale formularului nostru (acestea sunt modificate în panoul Proprietăți):
Name = frmMain - aceasta este de obicei numele formei principale;
Caption = "Limba de programare simplă versiunea 1.0.0" - aici puteți scrie tot ceea ce sufletul dvs. de programare dorește!
De asemenea, schimbați lungimea și lățimea formei principale la a ta.
Și schimbați BorderStyle la 1 - Fixed Single și MinButton la True. Acum am interzis redimensionarea formelor.
De ce va consta programul nostru? Desigur, mai întâi trebuie să creăm un câmp de intrare, în care utilizatorul își va scrie codul.
Deci, faceți clic pe butonul TextBox de pe bara de instrumente.

Apoi utilizați metoda de tragere pentru a marca această componentă pe formular. Specificați lungimea și lățimea dorite și, de asemenea, modificați în mod necesar proprietatea MultiLine la True. Acest lucru vă va permite să scrieți cod într-un câmp de text, nu o linie, ci mai multe. De asemenea, proprietatea ScrollBars trebuie setată la 2 - Vertical. În același timp, în timpul introducerii textului de către utilizatorul programului nostru, în dreapta apare o bară de defilare. Apropo, câmpul de intrare am sunat txtCode (Name = txtCode).
Acum cred că este necesar să creați mai multe butoane, care de fapt vor efectua acțiunile de bază ale programului. Acestea sunt butoanele "Start" și "Ieșire". De asemenea, puteți adăuga mai multe butoane la discreția dvs. și vă voi explica ce vor face aceste două butoane. Nu este greu de ghicit că primul buton va lansa codul pe care îl va introduce utilizatorul, iar al doilea buton este ieșirea din program. Prin urmare, în proprietatea Caption a primului buton, introduceți "Start" și al doilea "Exit".

Asta este, înlocuiți vba6.dll cu vba5.dll și eliminați privat. Acum programăm butoanele. Ce scrieți în procedura care se ocupă de butonul de ieșire clic (clic) știm:
Private Sub cmdExit_Click ()
capăt
End Sub
Așa cum ați înțeles deja după procesarea evenimentului Terminarea programului își încheie activitatea, adică se oprește. Acum mergeți la programarea celui de-al doilea și cel mai important buton. Folosind funcția pe care am descris-o mai sus, traduce textul simplu în codul executabil. Deci, mai întâi verificați dacă câmpul text conține textul:
Dacă Len (txtCode.Text) <> Atunci
și dacă totul este în ordine, atunci mergem mai departe. Declarați variabilele care ne vor ajuta:
Dim rezultat ca boolean, cod ca șir
Variabila Rezultatul va conține valoarea returnată de funcția EbExecuteLine. Și în variabila Cod, textul pe care îl trimitem procesării, atribuiți imediat acest text câmpului de text din câmpul de introducere:
Cod = txtCode.Text
Acum, variabila Cod conține valoarea câmpului de introducere. Funcția EbExecuteLine are un dezavantaj: nu poate procesa un caracter de linie nouă (în BASIC este vbCrLf), dar înțelege colonul (:) și trebuie să-l folosească. Aceasta înseamnă că înlocuim vbCrLf cu un colon:
Cod = Înlocuiți (Cod, vbCrLf, ":")
Am decis că vom avea o sintaxă rusă, însă funcția EbExecuteLine este înțeleasă doar de operatorii englezi, astfel încât toți operatorii ruși care vor îndeplini programul vor traduce în limba engleză:
Cod = Înlocuiește (Cod, "Dacă", "Dacă". 2)
Cod = Înlocuiți (Cod, "Apoi", "Apoi." 2)
Cod = Înlocuiți (Cod, "Mesaj", "MsgBox" 2)
Cod = Înlocuire (Cod, "De la", "Pentru." 2)
Cod = Înlocuire (Cod, "To", "To", 2)
Cod = Înlocuiți (Cod, "Următorul", "Următorul" .2)
Cifra 2 de la sfârșitul înlocuirii înseamnă că caracterele trebuie înlocuite indiferent de registrul în care sunt localizate. Puteți adăuga alți operatori. Am folosit doar cele mai utilizate. Ultimul lucru rămas este să executați codul din câmpul de text:
Rezultat = EbExecuteLine (StrPtr (Cod), 0, 0, False) = 0
iar dacă există erori, raportăm acest lucru:
Dacă rezultatul = Fals Apoi MsgBox „Eroare în sintaxa programului!“, _ VbCritical, „SPL de Daniyar Atadjanov“
txtCode.SetFocus

Ei bine, asta e tot. Este timpul să introduceți codul care va funcționa dacă utilizatorul nu a introdus text în câmp:
altfel
MsgBox "Câmpul de introducere a codului nu trebuie să fie un antet gol!", VbCritical, _ "SPL de Daniyar Atadjanov"
Sfârșit Dacă

Mai jos este întregul cod al programului:

Și acum cel mai interesant. Încercați să introduceți ceva similar în acest domeniu:
frmMain.Hide
Mesaj text „La revedere!“
frmMain.Show
Msg "Bună ziua!"

Articole similare