Недавно я опубликовал обзор написания программы 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