2012-02-08 2 views
1

Я хотел бы разбирать строковые литералы с помощью FParsec. Под «строковых литералов» Я имею в виду что-то между открытием и закрывающей кавычки (в моем случае - одинарная кавычка):Разбор строк литералов с FParsec?

'Please, switch off your mobile phone' 

То, что я сейчас делаю это следующее:

let string = between (pstring "'") (pstring "'") (manySatisfy isLetter) 

Но это останавливается после того, как первое письмо потребляется. Есть ли способ сделать это жадным?

+1

В учебном пособии FParsec обсуждается, как разбирать строковые литералы в http://www.quanttec.com/fparsec/tutorial.html#parsing-string-data –

ответ

7

Это уже жадный; manySatisfy isLetter анализирует последовательность букв из входного потока.

Проблема заключается в том, что синтаксический анализатор не с , или пространствами, поскольку они не являются буквами. Это может быть исправлено с помощью:

manyChars (noneOf "'") 

или более явно с помощью:

manySatisfy ((<>) '\'') 

вместо этого.

+0

Я считаю, что использование синтаксических парсеров типа 'manySatisfy' должно быть быстрее, чем комбинация 'manyChars' и' satisf'. – pad

+0

Вы правы, я забыл, что 'manySatisfy' возвращает строку. – Guvante

Смежные вопросы