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
}
}
}"""
各ブロックのコストと期間の識別子と値を抽出するための高速で最適化された方法が必要です。演算子を使用しようとしまし^^
たが、繰り返される内部値には役に立たないようです