- PVSM.RU - https://www.pvsm.ru -

W.Script языки. Часть 2 — высокоуровневые языки, или зачем нам в корпорации C++

Недавно я опубликовал [1] обзор написания программы Hello, world на корпоративном языке R.Script LLP. Данный язык считается у нас в корпорации низкоуровневым, так как является самым быстрым, среди используемых нами. Сейчас же я расскажу о его модификации — R.Script M HPL (Modified HighProgrammingLanguage).

Предисловие, или для чего написана эта статья

Данная статья написана исключительно для того, чтобы показать как мы в нашей корпорации реализуем те, или иные задачи, а также показать наши разработки. W.S языки программирования (R.Script, L.Script, W-Script) используются только в нашей корпорации и не подлежат полному раскрытию, исключительно знакомство с синтаксисом и прочими особенностями.

Обзор R.Script Modified

Написание Hello, world

Написание Hello,world намного отличается легкостью по сравнению с LLP. Здесь сначала подгружаются модификации языка:

LOAD(INCLUDE{SCRIPT[~SYSTEM:.add>highlevel#]}); //Loading file C:/R.Script/highlevel.add

А потом собственно и используем язык. В данной модификации уже предусмотрено тело main:

source .main {
  //Some code there
}

А теперь и используем встроенные функции вывода:

var(int) conid = Console.OpenWindow(title="Hello,world",desp="Example application");
Console.WriteLine("Hello,world");
Console.CloseWindow(id=conid);

И получаем вот такую не очень мудрую программу, и при всем она работает почти на всех платформах, используя Консоль в Windows и терминал в Linux/Mac.

//R.Script 2012 M HPL Hello world
source .main {
  var(int) conid = Console.OpenWindow(title="Hello,world",desp="Example application"); //Открываем окно консоли, где будем писать
  Console.WriteLine("Hello,world"); //Пишем в консоли, стандартно в последней открытой
  App.Wait(5s); //Ожидаем 5 секунд до следующей команды (аналог App.Sleep)
  Console.CloseWindows(id=conid); //Закрываем окно консоли
}

А теперь практика

Ну, а теперь я решил написать скрипт переводчика в консоли, используя сервис Google Translate и работу с ее API.

create function .getTranslatedText (pagecode) {
  if (var.isset=pagecode and var.!empty==pagecode and String.Search(result,"translatedText")==TRUE) {
    var(str) result = String.Cut(mode="searchline",""translatedText" :"(.*)"","intext"); //Находим строку с текстом и оставляем только текст
    return result;
  } else {
    if (Console.IsOpened()==FALSE) var(int) conid = Console.OpenWindow(); //Если консоль не открыта - открываем
    Console.WriteLine("translated text get error"); //Ошибка
    use finish(conid); //Используем функцию завершения приложения. Приставка use используется для того, чтобы отделить пользовательские и функции из дополнений от основных
    return 0;
  }
}
create function .finish(consoleid) {
  if (Console.IsOpened==FALSE) App.Exit(); //Проверяем, есть ли открытая консоль, если нету - выходим
  if (var.!isset=consoleid and var.empty=consoleid and Console.WindowExists(consoleid)) App.Exit(); //Проверка на правильность переменной переменной
  Console.WriteLine(text="Программа завершена, для выхода нажмите любую клавишу",window=consoleid);
  Console.WaitKey();
  App.Exit();
}
source .main {
  include("SYSTEM:.dir>HTTP:.hpl>prot"); //Загружаем модуль, для работы через протокол HTTP (файл C:SourceHTTPprot.hpl)
  conid = Console.OpenWindow(title="Англо-русский Переводчик","Powered by Google Translate");
  var(arr) messages = Array.Create(0>"Переводчик приветствует вас! Введите текст для перевода",1>"Загрузка ответа от сервера",2>"Перевод Вашего текста:",3>"Работа переводчика завершена, нажмите любую клавишу для выхода, или F2 для перевода другого текста");
  var(int) messnum = 0;
  Console.WriteLine(messages[messnum]);
  var(str) texttotrans = Console.ReadLine();
  Console.WriteLine(messages[messnum++]);
  result = HTTP.GetHTML(url="https://www.googleapis.com/language/translate/v2?key=MY_KEY&source=en&target=ru&q="..String.Change(" ">"%20",texttotrans),mode="secure");
  var(str) return = use getTranslatedText(result);
  Console.WriteLine(messages[messnum++].."nr"..return.."nr"..messages[messnum++]);
  var(int) userkey = Console.ReadKey();
  if (userkey==K_KEY_F2) {
    App.ClearVars();
    App.StartMain();
  } else App.Exit();
}

В результате мы получили консольный мультиплатформенный англо-русский переводчик. Вот и практическое применение. В данном коде можно узнать практически все особенности данного языка. Если что-то не понятно — можно задать вопросы.

От автора

Данный язык на практике почти не используется. Используется в основной L.Script и W.Script Platform, о которых я напишу в следующей статье и распишу подробно что там и зачем, а также сравню их коды с кодами C++ и их достоинства по сравнению с ним. Также расскажу о построении GUI приложений с использованием встроенных библиотек L.Script

Продолжение следует...

Автор: Layan

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/19685

Ссылки в тексте:

[1] опубликовал: http://habrahabr.ru/post/158013/

[2] Источник: http://habrahabr.ru/post/158099/