я реализовал рекурсивный спуск и PEG-как парсер в прошлом, где вы могли бы сделать что-то вроде этого:Как обращаться с x *, x + или x? регулярные выражения в LR-парсере?
Path -> Segment+
Segment -> Slash Name
Segment ->/
Name -> /\w+/
Slash ->/
- где
Segment+
означает «матч один или болееSegment
» - и есть простой старый регулярное выражение для сопоставления одного или более символов слова с
\w+
Как вы обычно выполнить эту же рода вещи с LR грамматик/анализаторами? Все примеры парсеров LR, которые я видел, очень просты, например, разбор 1 + 2 * 3
или (())()
, где шаблоны очень просты и, похоже, не связаны с «одной или несколькими» функциональными возможностями (или ноль или более с *
или необязательно с ?
). Как вы это делаете в парсере LR?
Или же для анализа LR сначала требуется лексическая фаза (т. Е. Парсер LR требует терминальных и нетерминальных «токенов»). Надеясь, что есть способ провести партицию LR без двух этапов. определение из LR парсеры говорят о «входных символах» в книгах/сайтах я читал, но потом вы видите случайно/тонко линию, как:
терминальные символы грамматики являются мульти- символьные символы или «токены», найденные во входном потоке с помощью лексического сканера.
И это как что, откуда появился сканер.