[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