Требуется ли точность синтаксического анализатора для PHP / JavaScript / CSS? - PullRequest
1 голос
/ 14 марта 2012

Я пишу парсер снизу вверх для PHP, JavaScript и CSS. Желательно, чтобы я написал один парсер, который сможет анализировать все языки. Я где-то слышал, что JavaScript может быть проанализирован с помощью анализатора LALR (1) (однако, поправьте меня, если я ошибаюсь). Будет ли парсер LALR (1) достаточен для PHP и CSS, или мне нужно написать что-то другое?

1 Ответ

2 голосов
/ 14 марта 2012

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

Вы можете заставить практически любую технологию синтаксического анализа анализировать любой язык, приняв «слишком много» (потому что механизм синтаксического анализа не достаточно силен, чтобы различать) и добавив обработку после анализа проанализированной структуры (обычно AST) для проверки / обработать / устранить допущенное превышение.

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

Итак, LALR (1) сделает это. Есть также доказательства существования; интерпретатор PHP реализован с использованием Bison (LALR (1)); Вы можете сами убедиться в этом, загрузив архив PHP и покопавшись в нем.

Я не думаю, что CSS - это сложная грамматика. Я думаю, что есть много всего этого.

JavaScript доставит вам неприятности из-за проблемы пропущенной точки с запятой, потому что он определен как «если парсер выдаст вам ошибку без нее, и ее нет, притворитесь, что она есть». Таким образом, по сути вы должны использовать механизм обработки ошибок в парсере для восстановления.

Ты смотришь на большую работу. Не будет ли проще получить существующие парсеры? Или вам нужен какой-то единый набор машин по причине?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...