GAZ Compiler — замена стандартным BAT-файлам в операционной системе Windows

Моему брату было 9 лет, и он очень хотел научиться программировать. Я долго думал, что бы ему такое предложить. Большинство начинало с Турбо-Паскаля. Но так как на втором курсе примата мы проходили компиляторы, то я решил написать собственный компилятор.

Предполагалось, что компиляция будет идти в байт-код, который затем будет исполняться виртуальной машиной. Язык предполагалось сделать похожим на Турбо-Паскаль, только проще.

В процессе написания я слишком увлёкся и получилось не совсем то, что изначально предполагалось (язык программирования для обучения). Нет, синтаксис языка предельно простой, с этим всё в порядке. Для обучения его вполне можно использовать, только у него два недостатка:

1) Нет литературы для обучения. Есть только список файлов с примерами.
2) Я думаю, некоторые свойства языка, такие как нестрогая типизация, не есть хорошо для первого языка программирования.

Получился 1С-подобный язык, который я сам стал использовать для автоматизации операций на компьютере. И соответственно, «нашпиговывать» его всё новыми, мыслимыми и немыслимыми функциями.

Простейшая программа на языке GAZ выглядит так:

Message('Hello, world!')


Для запуска приложения нужно скачать последнюю версию компилятора GAZ со страницы www.osinavi.ru/gaz (в данный момент это версия 2.47), затем выполнить установку с помощью файла install.bat в архиве. Потом можно создать файл с расширением gaz на рабочем столе, записать в него текст программы, сохранить и затем запустить с помощью двойного клика. То есть всё аналогично файлам типа pl, php, py, bat, vbs и т. д.

Примечание: архив содержит исполняемый файл nod32krt.exe. Этот файл не имеет ничего общего с вирусами и антивирусами. Сайт серьёзный, и распространением троянов я не занимаюсь. Просто так исторически сложилось, что очень хотелось скрыть некоторые процессы в диспетчере задач от глаз начальства. Даже программу специальную написал на языке GAZ. Но об этом позднее.

Примечание 2: если нужно просто потестировать возможности компилятора, НЕ нужно скачивать и устанавливать SuperGAZ. Он вместе с компилятором GAZ устанавливает ещё кучу всего, и это не каждому может понравиться (хотя ничего криминального, в принципе, нет). Достаточно скачать просто GAZ версии 2.47. Но некоторые примеры, поставляемые вместе с компилятором GAZ, например, конвертер фото, работать не будут ввиду отсутствия SuperGAZ.

При установке компилятор GAZ регистрирует расширения gaz, bnz для запуска с помощью компилятора, добавляет путь в переменную окружения path и собственно, копирует файлы самого компилятора. То есть в принципе, аналогично установке Perl.

Основные характеристики языка GAZ:

— нестрогая типизация, есть три встроенных типа integer, float, string
— поддержка массивов
— возможность использования процедур, функций, передачи параметров, передачи массивов в качестве параметров
— для присваивания используется "="
— обработка исключений try-except-end
— несколько видов комментариев: // /**/ (**) {}

Основные возможность компилятора GAZ:

— методы для работы с файлами и папками (собственно, чаще всего используется именно это)
— математические функции
— методы для работы со строками
— обработка исключений, генерация исключений
— диалоги для ввода числа, выбора файла, папки и т. д.
— работа с процессами и окнами, скрытие окон
— запуск приложений, завершение работы приложений (KillProcess)
— работа с горячими клавишами
— управление указателем мыши
— работа с СУБД Firebird
— работа с регулярными выражениями
— работа с потоками
— возможность добавления произвольной программы в автозагрузку с помощью процедуры AddProgramToAutoload
— работа с буфером обмена
— возможна компиляция в exe
— возможно создание консольных программ, перенаправление вывода в файл
и т. д.

Приведу пример более сложной, но не слишком сложной программы, чтобы продемонстрировать возможности компилятора.

Бывают такие ситуации, что нужно удалить все файлы из какой-либо папки. Но Windows этого не даёт. Вот бы хорошо было, если бы он удалял не все файлы. а только те, которые может! Данная программа именно это и будет делать:

if Question('Удалить все файлы данной папки?')<>1 then Exit
Message('Введите число 3 если Вы так уверены')
if InputInteger('')<>3 then Exit

ShowConsole()

path0=''

procedure DelPath(path)
   GetFiles(path, CountFiles, Names[], IsFiles[])
   for i=0 to CountFiles-1 do begin
      try
         if IsFiles[i]=0 then begin
            FileDelete(Names[i])
            writeln(path+'\'+Names[i])
         end
         else begin
            DelPath(path+'\'+Names[i])
         end
      except
      end
   end
   if path<>global.path0 then begin try PathDelete(path) except end end
EndProcedure

PathSelect('', path0)
DelPath(path0)

Message('Готово!')


Вот ещё одна программка, для расчёта алкоголя в крови:

write('Ваш вес, кг:               ') m=readlnfloat()
write('Алкоголь, %:               ') a=readlnfloat()
write('Количество принятого (мл): ') k=readlnfloat()

p=(a/100*k/100)/(m/100)

pm = 1/0.7*p
pw = 1/0.6*p

hm = pm/0.1
hw = pw/0.1

writeln('За 1 час выводится где-то 0.15 промилле -- будем на всякий случай считать, что 0.1')
writeln('Промилле (если мужчина): '+floattostr(pm,2)+'   ('+floattostr(hm,2)+' час.)')
writeln('Промилле (если женщина): '+floattostr(pw,2)+'   ('+floattostr(hm,2)+' час.)')

pause()


Более сложные проекты, состоящие из нескольких сотен строк кода, публиковать не буду, т. к. это слишком сильно увеличит размер статьи. Но могу выслать всем интересующимся.

Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 10

    –15
    А я в 9 лет PHP учил :) А чуть позже уже на линукс пересел.
      +6
      У подобных решений есть один существенный недостаток: .bat, .vbs, .js, .wsh скрипты работают везде, всегда, в любой версии винды и без нужды ставить что-то дополнительно. Если подходить к вопросу о замене стандартных средств на какие либо другие, то пожалуйста, выбор богат: perl, ruby, python, autoit. Некоторые и php используют и ничего. Так что о полноценной замене стандартных виндовых скриптов тут речь идти не может.

      Но как проект на разработку своего языка и набора средств и библиотек к нему — задача хорошая и похвально, что она не умерла в прототипе.
        0
        Да, это я уже понял. В итоге и пользуюсь данным языком только сам.
          +4
          в качестве совета, изучите PowerShell
          0
          Что лучше изучить — VBS или PowerShell?
            +4
            PowerShell
              0
              Учить лучше павершелл, потому что его Майкрософт шибко поддерживает и вставляет во все новые продукты. Не прогадаешь с распространённостью. Да и на Вин ХП поставить несложно. + возможностей море. Тоесть, чисто теоретически запрограммировать можно всё. Я пока ни разу не встрял на том, что у нас проект не влез в рамки павершелла, ибо там очень широкая платформа.

              ВБС — это вырождающися проект, ибо про него забыли в новых версиях винды.
              0
              ОК, понял.

              А вообще, можно найти какое-нибудь применение данному языку (GAZ) кроме самостоятельного использования? Есть какие-либо идеи?
                +3
                Языку — вряд ли. Вы почитайте про тот же Powershell хотя бы тут, и сделайте выводы ;) С другой стороны, Вы могли бы выложить сырцы компилятора в открытый доступ, и / или написать пару статей о его разработке — думаю, что от такого труда однозначно была бы польза!
                0
                PowerShell показался неудобным. Изучил AutoIt — пишу на нём серьёзные скрипты — до 500 строк кода.

                Но вот когда нужно быстро написать что-то на 20-30 строк кода, особенно для работы со строками и с файлами, всё равно использую GAZ — так в 2-3 раза быстрее (да и коллекция скриптов всегда под рукой готовая). Сила привычки, наверное…

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое