Я сомневаюсь, что вы можете реализовать один парсер для разбора всех 3-х этих языков. Я думаю, вам понадобится 3 парсера. Они могут использовать общий механизм синтаксического анализа, если вы это имеете в виду.
Вы можете заставить практически любую технологию синтаксического анализа анализировать любой язык, приняв «слишком много» (потому что механизм синтаксического анализа не достаточно силен, чтобы различать) и добавив обработку после анализа проанализированной структуры (обычно AST) для проверки / обработать / устранить допущенное превышение.
Аргумент таков: сколько лишнего вы должны собрать, и насколько больно устранять принятый избыток.
Итак, LALR (1) сделает это. Есть также доказательства существования; интерпретатор PHP реализован с использованием Bison (LALR (1)); Вы можете сами убедиться в этом, загрузив архив PHP и покопавшись в нем.
Я не думаю, что CSS - это сложная грамматика. Я думаю, что есть много всего этого.
JavaScript доставит вам неприятности из-за проблемы пропущенной точки с запятой, потому что он определен как «если парсер выдаст вам ошибку без нее, и ее нет, притворитесь, что она есть». Таким образом, по сути вы должны использовать механизм обработки ошибок в парсере для восстановления.
Ты смотришь на большую работу. Не будет ли проще получить существующие парсеры? Или вам нужен какой-то единый набор машин по причине?