[Moscow.pm] Про подсветку синтаксиса

Егор Байбара xuntaka на gmail.com
Вт Дек 17 01:09:09 PST 2013


Потому что, чтобы это корректно распарсить, надо знать все прототипы и
функции.
Т.е. полностью держать в памяти половину CPAN :)
Ведь если функция импортирована из какого-нибудь модуля, то никто не
узнает, сожрет она аргумент или не сожрет.

Т.е. это та проблема перла, которая решается только дисциплиной. А именно
писать регекспы так, что было понятно, что это регекспа не только
компилятору.


2013/12/17 TheAthlete <theathlet на yandex.ru>

> Кстати он тоже не может парсить этот код (вывод PPI::Dumper):
>
> PPI::Document
>   PPI::Token::Comment   '#!/usr/bin/perl\n'
>   PPI::Token::Whitespace        ' \n'
>   PPI::Statement::Include
>     PPI::Token::Word    'use'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'strict'
>     PPI::Token::Structure       ';'
>   PPI::Token::Whitespace        '\n'
>   PPI::Statement::Include
>     PPI::Token::Word    'use'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'warnings'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'FATAL'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Operator        '=>'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Quote::Single   ''all''
>     PPI::Token::Structure       ';'
>   PPI::Token::Whitespace        '\n'
>   PPI::Statement::Include
>     PPI::Token::Word    'use'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'feature'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Quote::Single   ''say''
>     PPI::Token::Structure       ';'
>   PPI::Token::Whitespace        '\n'
>   PPI::Token::Whitespace        ' \n'
>   PPI::Statement::Sub
>     PPI::Token::Word    'sub'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'with_prototype'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Prototype       '()'
>     PPI::Token::Whitespace      ' '
>     PPI::Structure::Block       { ... }
>       PPI::Token::Whitespace    '\n'
>       PPI::Token::Whitespace    '    '
>       PPI::Statement::Break
>         PPI::Token::Word        'return'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Number      '100'
>         PPI::Token::Structure   ';'
>       PPI::Token::Whitespace    '\n'
>   PPI::Token::Whitespace        '\n'
>   PPI::Token::Whitespace        ' \n'
>   PPI::Statement::Sub
>     PPI::Token::Word    'sub'
>     PPI::Token::Whitespace      ' '
>     PPI::Token::Word    'without_prototype'
>     PPI::Token::Whitespace      ' '
>     PPI::Structure::Block       { ... }
>       PPI::Token::Whitespace    '\n'
>       PPI::Token::Whitespace    '    '
>       PPI::Statement::Break
>         PPI::Token::Word        'return'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Number      '100'
>         PPI::Token::Structure   ';'
>       PPI::Token::Whitespace    '\n'
>   PPI::Token::Whitespace        '\n'
>   PPI::Token::Whitespace        ' \n'
>   PPI::Statement::Compound
>     PPI::Token::Word    'foreach'
>     PPI::Token::Whitespace      ' '
>     PPI::Structure::List        ( ... )
>       PPI::Statement
>         PPI::Token::Number      '1'
>     PPI::Token::Whitespace      ' '
>     PPI::Structure::Block       { ... }
>       PPI::Token::Whitespace    '\n'
>       PPI::Token::Whitespace    '    '
>       PPI::Statement
>         PPI::Token::Word        'say'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Word        'with_prototype'
>         PPI::Token::Whitespace          '    '
>         PPI::Token::Operator    '/'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Number      '10'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Structure   ';'
>       PPI::Token::Whitespace    ' '
>       PPI::Token::Comment       '# /  ; die "this dies!";'
>       PPI::Token::Whitespace    '\n'
>       PPI::Token::Whitespace    '    '
>       PPI::Statement
>         PPI::Token::Word        'say'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Word        'without_prototype'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Operator    '/'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Number      '10'
>         PPI::Token::Whitespace          ' '
>         PPI::Token::Structure   ';'
>       PPI::Token::Whitespace    ' '
>       PPI::Token::Comment       '# /  ; die "this dies!";'
>       PPI::Token::Whitespace    '\n'
>   PPI::Token::Whitespace        '\n'
>   PPI::Statement::End
>     PPI::Token::Separator       '__END__'
>     PPI::Token::Whitespace      '\n'
>     PPI::Token::End     'OUTPUT:\n10\n100\nthis dies! at a.pl line 17.\n'
>
> т.е. он тоже представляет строку как комментарий:
>
> PPI::Token::Comment       '# /  ; die "this dies!";'
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением,
Егор Байбара

+7-963-675-29-49
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131217/8d03e562/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm