За последний вопрос:
> parse (many digit) "123abc"
[("123", "abc")]
Означает, что синтаксический анализ прошел успешно, поскольку в списке ответов был возвращен хотя бы один результат. Парсеры Hutton всегда возвращают список - пустой список означает ошибку синтаксического анализа.
Результат («123», «abc») означает, что синтаксический анализ нашел три цифры «123» и остановился на «a», который не является цифрой, поэтому «остальная часть ввода» - это «abc».
Обратите внимание, что many
означает «столько, сколько возможно», а не «один или несколько». Если бы это был «один или несколько», вы бы получили такой результат:
[("1", "23abc"), ("12", "3abc"), ("123", "abc")]
Такое поведение не очень хорошо для детерминированного анализа, хотя иногда может потребоваться для анализа на естественном языке.