Другие люди ранее публиковали эту ссылку на похожие вопросы, но я думаю, что это весело и имеет хороший пример: Perl не может быть проанализирован (формальное доказательство) .
По этой ссылке:
[Рассмотрим] следующий дьявольский фрагмент кода, придуманный Рэндалом Шварцем, и определим правильный синтаксический анализ для него:
независимо от /25;# /;die "this dies!";
Фрагмент Шварца может анализировать два разных способа: если все, что является нулевым (то есть не принимает аргументов), первое утверждение является делением в пустом контексте, а остальная часть строкиэто комментарий.Если что-либо принимает аргумент, фрагмент кода Шварца анализирует как вызов любой функции с результатом оператора match, а затем вызов функции die ().
Это означает, что для статического анализа Perl, должно быть возможно определить из строки кода Perl 5, устанавливает ли он нулевой прототип для любой подпрограммы.
Я просто публикую эту часть, чтобы показать, что она действительно очень быстро становится очень сложной.
В качестве альтернативы, многие редакторы кода / текста могут выполнять приличную (хотя и не отличную) работу по выделению синтаксиса, так что вы можете начать с этих спецификаций, чтобы увидеть, что они делают.На самом деле вы вдохновили меня, я думаю, что я опубликую связанный вопрос, спрашивающий, какой редактор лучше всего выделяет Perl.