我正在使用 Scala 的模式组合器编写罗马化工具。
在其中一个解析器中,我希望能够匹配一组字符串值并将它们转换为相应的值。
也就是说,我使用 Map[String, String] 在这些值之间进行转换,但我没有找到一种方法来匹配地图的键而不使用单独的正则表达式。
object Transliteration extends RegexParsers {
private[text] val diphthongsMap = Map(
"ай" -> "ay",
"ей" -> "ey",
"ий" -> "iy",
"ой" -> "oy",
"уй" -> "uy",
"ый" -> "yi",
"эй" -> "ey",
"юй" -> "yuy",
"яй" -> "yay"
)
def diphthong: Parser[String] =
"""ай|ей|ий|ой|уй|ый|эй|юй|яй""".r ^^ { diphthongsMap(_) }
def text: Parser[String] =
rep1(notSymbols, extendedWord) ^^ { _.mkString }
[... bunch of other parsers ...]
def translatePhrase(phrase: String): String =
parseAll(text, phrase).get
}
我可以完全放弃显式正则表达式吗?也许写自定义解析器?
编辑:我并不完全清楚我只是想要更有效的编码diphthong
方法而不需要硬编码,而不是重写程序的整个逻辑。