Во-первых, я не изучаю информатику, меня просто интересует предмет.
Парсер в основном делает это правильно:
- чтение ввода
- создавать токены
- собственно разобрать токены и создать AST
Поэтому я подумал, что для того, чтобы решить, принадлежит ли слово к обычному языку, вы используете автомат, а для языков CF вам понадобится синтаксический анализатор из-за рекурсивных структур, которые могут существовать. Следовательно, существуют генераторы сканеров для обычных языков и генераторы парсеров для языков CF.
Но теперь я прочитал, что вы можете создать рекурсивный приличный парсер для регулярных выражений:
http://matt.might.net/articles/parsing-regex-with-recursive-descent/
Так как же все это происходит вместе?
Зачем мне разбирать обычные языки? Я думал, что конечного автомата достаточно?
Если, например, Я хочу распознавать блочные комментарии в java-программе (т.е. /* .. */
), мне нужно только написать FSM, так что в основном оператор switch-case-statement. Парсер мне для этого не нужен ...
Спасибо за помощь и разъяснения!