我已经看到了在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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top