Створення свого компілятора на visual basic!

Так дійсно, ми зараз спробуємо стандартними засобами створити свою мову програмування! Чи не дивуєтеся, але це не так складно як може здатися на перший погляд. Звичайно до створення справжнього компілятора далеко, але це лише приклад і далі все обмежується лише вашою фантазією та вмінням.
Ну що ж, приступимо. Для початку як-небудь назвемо наш новий мову. Ну наприклад Simple Programming Language - скорочено SPL. Будь-яка мова програмування складається з трьох частин:
а) правила синтаксису;
б) оператори;
в) власне сам компілятор.
Почнемо мабуть з пункту а. Правила синтаксису ми може встановити будь-які. нехай це
будуть ті ж правила, що і в Бейсике, але з російським синтаксисом тобто замість:
If x = 0 Then MsgBox "Error"
ви напишете гідне:
Якщо ікс = 0 Тоді Повідомл "Помилка"
НЕ правдалі здорово?
Пункт б. Ну якщо ми вибрали Бейсік, то і оператори будуть ті ж, що і в Бейсике, але російською мовою, це ви вже побачили в вищеописаному прикладі.
І нарешті найголовніше і цікаве - реалізація мови, тобто створення компілятора.
Відкриваємо Visual Basic і створюємо в ньому новий проект - Standard EXE.
Перед нами порожня форма. Почнемо її оформляти. Змініть деякі властивості нашої форми (їх міняють на панелі Properties):
Name = frmMain - так зазвичай називають основну форму;
Caption = "Simple Programming Language version 1.0.0" - тут ви можете написати все, що вашій програмістської душа забажає!
Так само змініть довжину і ширину основної форми під ваші.
І ще змініть BorderStyle на 1 - Fixed Single, а MinButton на True. Тепер ми заборонили зміна розмірів форм.
З чого складатиметься наша програма? Звичайно в першу чергу нам треба створити поле введення, куди користувач буде писати свій код.
Отже натискаємо на кнопку TextBox на панелі інструментів.

Потім методом протягування позначте цей компонент на вашій формі. Задайте потрібну довжину і ширину, а також обов'язково змініть властивість MultiLine на True. Це дозволить писати код в текстове полі не на один рядок, а на кілька. Також властивість ScrollBars треба встановити як 2 - Vertical. При цьому під час введення тексту користувачем нашої програми праворуч з'явиться смуга прокрутки. До речі, наше поле введення я назвав txtCode (Name = txtCode).
Тепер думаю потрібно створити кілька кнопок, які власне і будуть виконувати основні дії програми. Це кнопки "Запуск" і "Вихід". Можна також додати ще кілька кнопок на ваш розсуд, а я поясню, що будуть робити ці дві кнопки. Неважко здогадатися, що перша кнопка запустить код який впише користувач, а друга - це вихід з вашої програми. Тому в властивість Caption першої кнопки впишемо "Запуск", а другий "Вихід".

Тобто замінюємо vba6.dll на vba5.dll і прибираємо Private. Тепер програмуємо кнопки. Що написати в процедурі обробної натискання (Click) кнопки виходу ми знаємо:
Private Sub cmdExit_Click ()
End
End Sub
Як ви вже зрозуміли після обробки події End програма завершує свою роботу, тобто вимикається. Тепер переходимо до програмування другий, і найголовнішою, кнопки. Вона використовуючи функцію, можливості якої я описав вище, переводить звичайний текст в виконуваний код. Отже, спочатку перевіримо чи дійсно в поле вводу міститься текст:
If Len (txtCode.Text) <> 0 Then
і якщо все в порядку, то йдемо далі. Оголосимо змінні, які будуть нам допомагати:
Dim Result As Boolean, Code As String
В змінної Result буде знаходитися значення повертається функцією EbExecuteLine. А в змінної Code текст, який відправимо на обробку, тому відразу призначимо цієї змінної текст в поле введення:
Code = txtCode.Text
Тепер в змінної Code міститься значення поля введення. У функції EbExecuteLine є один недолік - вона не може обробити символ нового рядка (в Бейсике це vbCrLf), але зате вона розуміє двокрапка (:) і потрібно цим скористатися. Значить замінюємо vbCrLf на двокрапка:
Code = Replace (Code, vbCrLf, ":")
Ми вирішили, що у нас буде російський синтаксис, але функція EbExecuteLine розуміє тільки Англиские оператори, тому всі російські оператори, які зустрінуться програмі, переведемо на англійські:
Code = Replace (Code, "Якщо", "If". 2)
Code = Replace (Code, "Тоді", "Then". 2)
Code = Replace (Code, "Граф", "MsgBox". 2)
Code = Replace (Code, "Від", "For". 2)
Code = Replace (Code, "До", "To". 2)
Code = Replace (Code, "Наступн", "Next". 2)
Цифра 2 в кінці Replace означає, що символи повинні замінюватися незалежно від регістру в якому знаходяться. Ви можете додати і інші оператори. Я використовував лише самі часто використовувані. Залишилося останнє - запустити код з текстового поля:
Result = EbExecuteLine (StrPtr (Code), 0, 0, False) = 0
і якщо є помилки повідомляємо про це:
If Result = False Then MsgBox "Помилка в синтаксисі програми!", _ VbCritical, "SPL by Daniyar Atadjanov"
txtCode.SetFocus

Ну от і все. Прийшов час вставити код, який спрацює якщо користувач не ввів тексту в поле:
Else
MsgBox "Поле введення коду не повинно бути порожньою сткрокой!", VbCritical, _ "SPL by Daniyar Atadjanov"
End If

Нижче показаний весь код програми:

А тепер най-най цікаве. Спробуєте ввести в поле наприклад таке:
frmMain.Hide
Повідом "До побачення!"
frmMain.Show
Повідом "Приветик!"

Схожі статті