Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Создание макроязыка


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

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

{Label: again}

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

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

#!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

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

Автор: sharq 19.9.2005, 12:36
Anarki идея, конечно, интересная.

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

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

smile

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

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

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

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

Автор: Anarki 20.9.2005, 09:52
Регулярки я и сам могу, спасибо. А вот логику вложенных условий...
Хотя сейчас веду переговоры, чтобы отказаться от макроязыка в пользу упрощенного 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)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)