2014-12-11 3 views
0

С помощью этого кода"updateDet" не должен признавать ключевое слово "обновление"

import scala.util.parsing.combinator.JavaTokenParsers 

class TestKeywords extends JavaTokenParsers { 

    def keywords: Parser[String] = "update" 

    def identifier: Parser[String] = not(keywords) ~> """[a-zA-Z0-9_$#]+""".r 

    def script: Parser[Any] = repsep(identifier,",") 
} 

object TestKeywordsApp extends TestKeywords with App { 
    val cmd = """updateDet,update""" 
    parseAll(script, 
    cmd.stripMargin) match { 
    case Success(lup, _) => println(lup) 
    case x => println(x) 
    } 
} 

я получаю ошибку

[1.1] отказ: строку, соответствующую регулярное выражение \z' expected but и»найдено

updateDet, обновление

Как это исправить? updateDet не должны признавать ключевое слово

2.10.2

Скала
+3

Word границ возможно –

+1

Чтобы расширить, вы сказали, что 'identifier' is' not (keywords) ', за которым следуют некоторые символы. Но 'updateDet' не так - он начинается с ключевого слова. Возможно, вам следует объявить, что ключевое слово заканчивается границей слова (regex '\ b')? – lmm

+0

'\ b' помог, thx – user1043173

ответ

0

границы слова, возможно, –   Amit Joki

Для расширения, вы ' ве сказали, что identifier является not(keywords) следуют некоторые символы. Но updateDet isn ' t что - это действительно начинается с ключевого слова. Возможно, вам следует объявить, что ключевое слово заканчивается границей слов (regex \b)?   lmm

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