При написании парсера в библиотеке комбинаторов парсеров, таких как Haskell Parsec, у вас обычно есть 2 варианта:
- Напишите лексер, чтобы разбить ваш вход
String
на токены, затем выполните синтаксический анализ на[Token]
- Непосредственно писать комбинаторы парсеров на
String
Первый метод часто имеет смысл, учитывая, что многие входы анализа могут пониматься как токены, разделенные пробелами.
В других местах я видел, как люди рекомендуют против токенизации (или сканирования или лексинга, как их называют), причем простота цитируется в качестве основной причины.
Каковы общие компромиссы между лексикой и не делать этого?