繁体   English   中英

Scala中多个正则表达式的模式匹配

[英]Pattern Matching with Multiple Regex in Scala

我正在尝试在Scala中创建词法分析器。 我正在尝试做这样的事情

def lex(s: String): Expr = s match {
  case num(a)    => Number(a.toDouble)
  case mul(a, b) => Mul(Number(a.toDouble), Number(b.toDouble))
  case div(a, b) => Div(Number(a.toDouble), Number(b.toDouble))
  case add(a, b) => Add(Number(a.toDouble), Number(b.toDouble))
  case sub(a, b) => Sub(Number(a.toDouble), Number(b.toDouble))
  case   _       => Number(0)
}

其中num,mul,div,add,sub的定义如下:

val num: Regex = "[0-9]+".r
val add: Regex = "[0-9]+\\s*\\+\\s*[0-9]+".r
val sub: Regex = "[0-9]+\\s*\\-\\s*[0-9]+".r
val div: Regex = "[0-9]+\\s*\\/\\s*[0-9]+".r
val mul: Regex = "[0-9]+\\s*\\*\\s*[0-9]+".r

尝试对任何表达式( lex("1 + 2") )进行lex("1 + 2") ,结果始终为Number(0.0)而不是预期的Add(Number(1), Number(2))我不确定它出了什么问题...

您需要指定要提取的组。

val num = "([0-9]+)".r
val add = "([0-9]+)\\s*\\+\\s*([0-9]+)".r
val sub = "([0-9]+)\\s*\\-\\s*([0-9]+)".r
val div = "([0-9]+)\\s*\\/\\s*([0-9]+)".r
val mul = "([0-9]+)\\s*\\*\\s*([0-9]+)".r

每个提取的变量都需要一对括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM