2016-04-19 3 views
1
лестницу

мне нужно разобрать что-то вроде этого (включая двойные кавычки) - «блаблабла»Синтаксический двойных кавычках слова с анализатором

Мой класс должен расширять StdTokenParser. И мой класс имеет такой метод:

protected lazy val id: Parser[String] = "\"" ~ ident ~ "\"".? ^^ {case a ~ b ~ c => a + b + c} 

Здесь идент является членом StdTokenParsers признака.

И это хорошо работает, когда вход «блаблабла (есть только одна двойная кавычка), но когда вход„блаблабла“он не во время синтаксического анализа с исключением следующего:

Exception in thread "main" java.lang.RuntimeException: [1.1] failure:  
``"'' expected but "blablabla" found 

Так, может кто-нибудь помочь мне?

+1

Что именно «идентификатор» реализован для соответствия? И почему вы сделали заключительную цитату опциональной? –

+0

@ Łukasz def ident: Parser [String] = 'elem (" identifier ", _.isInstanceOf [Идентификатор]) ^^ (_.chars)' Я сделал закрытие цитатой необязательным только для тестирования. Это не влияет на результаты. – alex

ответ

1

StdTokenParsers использует StdTokens, которые уже размечают строковые литералы перед разбором.

сообщения об ошибке, потому что первый маркер (вся строке символов) не соответствует первой ожидаемой затяжке n ".

Вы можете использовать парсер stringLit из свойства StdTokenParsers и связать его с синтаксическим анализатором для самой строки или определить свои собственные токены, которые не содержат строковых литералов.

+0

stringLit не подходит для моего случая, потому что я должен разбирать отдельно следующие случаи: «case1» и «case2». Таким образом, это должно быть другое поведение моей программы, если он анализирует либо двойной кавычек, либо одинарный. Можете ли вы объяснить, как определить свой собственный токен? – alex

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