【问题标题】:How to write an Scala parser for arithmetic operations including string?如何为包括字符串在内的算术运算编写 Scala 解析器?
【发布时间】:2015-08-25 04:50:39
【问题描述】:

我正在尝试使用Scala Combinator-Parsing 来解析和算术运算,其中至少一个变量是字符串。我是 scala 的初学者,我喜欢它的这个功能! 例如我想解析:
(数字 + 2) * 4

它有一个很好的解析数字(带括号的浮点数和整数)的例子,例如:

  class Arith extends JavaTokenParsers {  
      def expr: Parser[Any] = term~rep("+"~term | "-"~term)
      def term: Parser[Any] = factor~rep("*"~factor | "/"~factor)
      def factor: Parser[Any] = floatingPointNumber | "("~expr~")"
    } 

这个是字符串:

       object MyParsers extends RegexParsers {
        val ident: Parser[String] = """[a-zA-Z_]\w*""".r
       }

如何更改第一部分以解析数字旁边的字符串?

【问题讨论】:

    标签: scala parsing arithmetic-expressions


    【解决方案1】:

    我认为您应该将其添加到替代因素中:

    def factor: Parser[Any] = ident | floatingPointNumber | "("~expr~")"
    

    【讨论】:

    • 那么我可以扩展“类 Arith 使用 RegexParsers 扩展 JavaTokenParsers”吗?因为 ident 扩展了 RegexParsers 并且我上面提到的 Arith 类扩展了 JavaTokenParsers,所以要添加 ident 我应该扩展 ident 所在的类,例如 MyParsers
    • JavaTokenParsers 已经扩展了RegexParsers,因此您不需要将两者结合起来。另外,JavaTokenParsers 已经定义了ident,所以你根本不需要MyParsers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2019-12-18
    • 2013-03-06
    • 2019-03-24
    相关资源
    最近更新 更多