В качестве домашнего проекта я хотел бы попытаться реализовать базовый язык моего собственного дизайна, который можно было бы использовать в качестве языка веб-сценариев. Запускать программу на C ++ как Apache CGI тривиально, поэтому настоящая работа заключается в том, как проанализировать входной файл, содержащий не код (разметку HTML / CSS) и код на стороне сервера.
В моем начальном курсе компилятора мы использовали Flex и Bison, чтобы создать сканер и синтаксический анализатор для простого языка. Нам дали копию грамматики и написали парсер, который переводил простой язык в простую сборку для виртуальной машины. Сканер гибкости токенизует ввод и передает токены парсеру Bison.
Разница между этим и тем, что я хотел бы сделать, заключается в том, что, как и PHP, этот язык может иметь простую разметку HTML и язык сценариев, вкрапленный следующим образом:
<p>Hello,
<? echo "World ?>
</p>
Я ошибаюсь, предполагая, что было бы эффективно проанализировать входной файл следующим образом:
- Scan input until a script start tag is found ('
- Second scanner tokenizes the server-side script section of the input file (from the open tag: '') and passes the token to the parser, which has no need to know about the markup in the file.
- Управление возвращается первому сканеру, который продолжает эту общую схему.
По сути, первый сканер различает только разметку (которая возвращается непосредственно в браузер без изменений) и код, который передается второму сканеру, который, в свою очередь, маркирует код и передает токены синтаксическому анализатору.
Если это не надежный шаблон проектирования, как языки, такие как PHP, эффективно обрабатывают сканирование ввода и синтаксический анализ кода?