FParsec сообщения об ошибках по умолчанию - PullRequest
1 голос
/ 27 августа 2011

Допустим, я определяю следующий синтаксический анализатор:

let identifier = many1Satisfy isLetter //match an identifier
let parser = identifier //our parser is only to match identifiers
test parser " abc" //the text to parse contains a leading space which should yield us an error

При синтаксическом анализе возникает ошибка, как и следовало ожидать:

Failure: Error in Ln: 1 Col: 1
 abc
^
Unknown Error(s)

Мне интересно, почему я не могупроблема в том, что он ожидает письмо и не может его найти.От меня ожидают, что я сам добавлю эту информацию в анализатор?

Ответы [ 2 ]

2 голосов
/ 27 августа 2011

о том, почему он не может сказать вам, что не так: Я думаю, это связано с «many1Satisfy» - вы видите, что этот комбинатор оборачивает другой анализатор, и я думаю, он просто не знает, в каком состоянии «many1» произошла ошибка, а не какая ошибка - поэтому он говорит «Unknown Error ) "

это должно работать:

let ws = spaces
let identifier = ws >>. (many1Satisfy isLetter) //match an identifier, ignore whitespaces infront
let parser = identifier //our parser is only to match identifiers
test parser " abc"
0 голосов
/ 27 августа 2011

Пробел не является обычным символом. В вашем случае вам нужно игнорировать пробелы, и для этого вам нужно составить ваш парсер с парсером, который игнорирует пробелы, и использовать этот новый составной парсер для разбора идентификатора.

Проверка 4.6 Обработка пробелов

...