如何在Scala解析器组合中组合RegexP和关键字
-
04-10-2019 - |
题
我已经看到了在Scala中建造解析器的两种方法。
首先是从Regexparers延伸并定义您的WON词汇模式。我看到的问题是,我不太了解它如何处理关键字歧义。例如,如果我的关键字与男子相同的模式匹配,则它将关键字作为伪装处理。
为了解决这个问题,我看到了这样的帖子 这个 这说明了如何使用标准风格的指定关键字。但是,然后,我不明白如何指定RegeXP模式!是的,StandardTokenParsers带有“ IDENS”,但它不带我需要的其他(复杂的浮点数表示,特定的字符串文字模式和逃脱的规则等)。
您如何获得指定关键字的能力和用正则表达式指定令牌模式的能力?
解决方案
我只写了 RegexParsers
- 衍生的解析器,但是我要做的就是这样:
val name: Parser[String] = "[A-Z_a-z][A-Z_a-z0-9]*".r
val kwIf: Parser[String] = "if\\b".r
val kwFor: Parser[String] = "for\\b".r
val kwWhile: Parser[String] = "while\\b".r
val reserved: Parser[String] = ( kwIf | kwFor | kwWhile )
val identifier: Parser[String] = not(reserved) ~> name
不隶属于 StackOverflow