Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 一种使用Scala解析器提取内部重复标识符的快速优化方法_Parsing_Scala - Fatal编程技术网

Parsing 一种使用Scala解析器提取内部重复标识符的快速优化方法

Parsing 一种使用Scala解析器提取内部重复标识符的快速优化方法,parsing,scala,Parsing,Scala,我在Scala中定义了这些语法规则: def root = rep(block) def block = ("block" ~ blockName ~ "{" ~ definition ~ "}") def blockName = ident def definition = creation ~ destruction ~ upgrades def creation = "creation" ~ "{" ~ duration ~ cost ~ "}" def destruction = "de

我在Scala中定义了这些语法规则:

def root = rep(block)
def block = ("block" ~ blockName ~ "{" ~ definition ~ "}")
def blockName = ident
def definition = creation ~ destruction ~ upgrades
def creation = "creation" ~ "{" ~ duration ~ cost ~ "}"
def destruction = "destruction" ~ "{" ~ duration ~ "}"
def upgrades = "upgrades" ~ "{" ~ rep(ident ~ "{" ~ duration ~ cost ~ "}") ~ "}"
def duration = "duration" ~ "=" ~ wholeNumber
def cost = "cost" ~ "=" ~ repsep(resource, ",")
def resource = (resourceType ~ "*" ~ wholeNumber)  
def resourceType = "wood" | "metal" | "food"
我的输入字符串是

"""
block citytown {
  creation {
    duration = 100
    cost = food * 10, wood * 10
  }
  destruction {
    duration = 100
  }

  upgrades {
    level1 {
      duration = 100
      cost = wood * 200  , food * 10
    }
    level2 {
      duration = 100
      cost = food * 30 , food * 10
    }
  }

}"""
我需要一种快速优化的方法来提取每个块中的标识符、成本和持续时间的值。我尝试使用^^运算符,但对于重复的内部值似乎没有用处