Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание макроязыка 
:(
    Опции темы
Anarki
Дата 19.9.2005, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



Интересует вопрос о создании мини макроязыка, в котором будут использоваться оператор условия проверяющий возвращаемое значение функции, переход по меткам и выполнение какой-то функции. Вот вопрос стоит как его распарсить...
Код

:again
IfScan (free,<pre>,</pre>)
   {
   Form (register, domain=ya.ru, nick=myhandle)
   IfScan (Registred) {done} {again}
   }

{Label: again}

Существуют ли модули, облегчающие работу или придется все писать самому, используя регулярки?



--------------------
PM WWW   Вверх
Anarki
Дата 19.9.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



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

#!C:/Perl/bin/perl.exe -w
use strict;
# список регекспов, макрокоманд
my %commands =
(
   label => qr/$\:(.+)/i,
   form  => qr/Form\s\((.+)?\)/i
);
sub parse_text {
    my $text = $_[0];
    my @text = split "\n", $text;
    foreach ( @text ) {
    print "$_\n";
            if ($_ =~ $commands{label}) {
               print "Метка найдена\n";
            } elsif ($_ =~ $commands{form}) {
               print "Форма найдена\n";
            }
    }
}
my $text =<<TEXT
Form (whois, domain=ya.ru)
:stop
TEXT
;
parse_text($text);


Хотя, наверное, лучше парсить все сразу, а не построчно... smile

Это сообщение отредактировал(а) Anarki - 19.9.2005, 10:34


--------------------
PM WWW   Вверх
GrayCardinal
Дата 19.9.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 1
Всего: 58



П-п. А оно вам надо или только "интересует" ? smile


--------------------
PM MAIL WWW   Вверх
sharq
Дата 19.9.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Anarki идея, конечно, интересная.

Как на счет xml-файлов, парсить на много легче, или структур данных перла, который ты можешь дампить Storable'ом.

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

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Anarki
Дата 19.9.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



Цитата(GrayCardinal @ 19.9.2005, 10:45)
П-п. А оно вам надо или только "интересует" ? smile

Оно действительно надо.
С этим языком будет работать человек мало разбирающийся в программировании.


--------------------
PM WWW   Вверх
GrayCardinal
Дата 20.9.2005, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 1
Всего: 58



Цитата
С этим языком будет работать человек мало разбирающийся в программировании.

Ну ни фига себе. smile
Накидайте поподробней список "операторов" и чего делать должны. А то я чего-то не въехал. Может подкину пару регулярок smile


--------------------
PM MAIL WWW   Вверх
Anarki
Дата 20.9.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



Регулярки я и сам могу, спасибо. А вот логику вложенных условий...
Хотя сейчас веду переговоры, чтобы отказаться от макроязыка в пользу упрощенного Perl.
Скажем все описания функций, глобальных переменных вынести в отдельный файл который будет подключать "файл-макросов". В самом файле "файле_макросов" будут просто использоваться функции, условия, переменных не будет видно глазом smile

Код

again:
Form ("whois", "domain=ya.ru");
If ( Scan ("free","<pre>","</pre>") )
  {
  Form ("register", "domain=ya.ru", "nick=myhandle");
  If (Scan ("Registred")) {goto done;} else {goto again;}
  }

done:

(Код может быть некорретным, это я показывал как будут выглядеть "макросы" на Perl)

Это сообщение отредактировал(а) Anarki - 20.9.2005, 09:52


--------------------
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0696 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.