parsing - 如何在 Scala 解析器组合器中组合正则表达式和关键字

标签 parsing scala keyword lexical-analysis lexical

我见过两种在 Scala 中构建解析器的方法。

第一个是从 RegexParsers 扩展并定义您赢得的词汇模式。我看到的问题是我并不真正理解它如何处理关键字歧义。例如,如果我的关键字与 ident 匹配相同的模式,则它将关键字作为 ident 进行处理。

为了反驳这一点,我看过类似 this one 的帖子显示如何使用 StandardTokenParsers 来指定关键字。但是,我不明白如何指定正则表达式模式!是的,StandardTokenParsers 附带了“ident”,但它没有附带我需要的其他内容(复杂的 float 表示、特定的字符串文字模式和转义规则等)。

如何获得指定关键字的能力和使用正则表达式指定标记模式的能力?

最佳答案

我只编写了 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

关于parsing - 如何在 Scala 解析器组合器中组合正则表达式和关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770569/

相关文章:

java - 字符串是否包含三个逗号分隔的数字?

javascript - 解析javascript获取页面标题的html结果

c# - 使用 "new"关键字使用反射创建对象

R, tm-error of transformation 丢弃文档

javascript - 在 javascript 正则表达式中验证带括号的 boolean 表达式

java - 如何使用java解析html列表值

scala - 如何在 Scala 中定义返回 Java 对象的方法?

eclipse - 如何在 Eclipse 中调试 Lift 应用程序?

scala - 创建两个模块的 IntelliJ "SBT project import"

class - gcc类用法