[Moscow.pm] Синтаксический анализ на Perl. Транслятор.
Nikolay Mishin
mi на ya.ru
Чт Янв 22 12:28:41 PST 2015
Руслан,
я тут понаписав парсеров на регулярках
с удовольсвием послушал бы про MarpaX::Repa
и как с помощью него распарсить скажем css
или html, если это, конечно, возможно,
ну для примера, как сделать грамматику для такой конструкции:
BEGIN DSSUBRECORD
Name "$APT_DBNAME"
Prompt "DB2 Database"
Default "BANKDATA"
HelpTxt "Default DB2 database to use"
ParamType "0"
ParamLength "0"
ParamScale "0"
END DSSUBRECORD
если это вообще стоит делать,т.к. я просто
это распарсил такой функцией:
sub split_fields_by_new_line {
my ($curr_record) = @_;
my %fields_and_values = ();
while (
$curr_record =~ m/
(?<name>\w+)[ ]"(?<value>.*?)(?<!\\)"|
((?<name2>\w+)[ ]\Q=+=+=+=\E
(?<value2>.*?)
\Q=+=+=+=\E)
/xsg
)
{
my ($value, $name) = ('', '');
if (defined $+{name}) {
$name = $+{name};
$value = $+{value};
}
elsif (defined $+{name2}) {
$name = $+{name2};
$value = $+{value2};
}
$fields_and_values{$name} = $value;
}
return \%fields_and_values;
}
> Marpa, Parse::RecDescent, Parse::Yapp, Parse::Eyapp.
>
> Первый мне очень нравиться. Попрбуйте с MarpaX::Repa. "Репу" написал сам и мне очень удобно с ним писать парсеры ибо можно написать грамматику и не определить все токены, то есть итеративно дополнять в процессе свой парсер без фатальных ошибок на этапе компиляции парсера. В новых версиях Marpa есть Scanless интерфейс - это самое близкое к Repa так как включает лексер и самое простое для начала.
>
> 2015-01-14 12:34 GMT+03:00 Харпалёв Иван <ivan.kharpalev на gmail.com>:
>
>> Доброго времени, могучий MoscowPM!
>>
>> Сейчас пишу небольшой язык.
>> То есть пишу транслятор из него в awk и С. (Сначала в awk, чтобы потренироваться, а потом в C, там типизация, там сложнее).
>>
>> Когда язык был совсем примитивный, я его парсил регэкспами и по рабоче-крестьянски собирал код на целевом языке.
>> Но язык подростает. И рефакторить оказывается очень печально.
>>
>> Как я понимаю весь процесс работы транслятора состоит из стандартных стадий, например:
>> токенизация
>> построение дерева разбора
>> сбор кода на целевом языке из полученного описания.
>>
>> В общем тория у меня хромает и очень интересна. Но первым делом практика.
>> Скажите, чем строить дерево синтаксического разбора?
>> что-то вроде
>>
>> --
>>
>> Moscow.pm mailing list
>>
>> moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Best regards, Ruslan.
--
С уважением
Николай Мишин
Подробная информация о списке рассылки Moscow-pm