Переопределите токен "stringLiteral" в Parsec.Token - PullRequest
1 голос
/ 26 февраля 2012

Я разрабатываю синтаксический анализатор языка Pascal в Haskell, используя библиотеку Parsec, и мне нужно переопределить некоторые токены, определенные в классе Parsec.Token.

Если говорить об этом, вот мой случай:

Мне нужно изменить способ сопоставления токена stringLiteral.В определении по умолчанию это что-то between char '"' ( см. ), но мне нужно, чтобы оно было between '\'' (апострофы).Как я могу сделать это изменение поведения Parsec?

Спасибо !!!

1 Ответ

3 голосов
/ 26 февраля 2012

Вы говорите о настройке поля типа данных с именем GenTokenParser. Похоже, вы используете функцию, которая автоматически заполняет тип данных разумными значениями по умолчанию, и вы просто хотите изменить одну вещь, вот и все:

 myMakeTokenParser langDef =
    let default = makeTokenParser langDef
    in default { stringLiteral = newStringLit }
  where
  newStringLit = lexeme (
                      do{ str <- between (char '\'')
                                         (char '\'' <?> "end of string")
                                         (many stringChar)
                        ; return (foldr (maybe id (:)) "" str)
                        }
                      <?> "literal string")
...