Scala ParserコンビネーターのRegexpとキーワードを組み合わせる方法
-
04-10-2019 - |
質問
Scalaにパーサーを構築するための2つのアプローチを見てきました。
1つ目は、regexparsersから拡張し、勝利した語彙パターンを定義することです。これで見られる問題は、キーワードのあいまいさをどのように扱っているかを本当に理解していないということです。たとえば、キーワードがIDENTSと同じパターンと一致する場合、キーワードをIDENTSとして処理します。
それに対抗するために、私はのような投稿を見ました これです StandardTokenParsersを使用してキーワードを指定する方法を示しています。しかし、その後、私はregexpパターンを指定する方法を理解していません!はい、StandardTokenParsersには「識別」が付属していますが、必要な他のもの(複雑な浮動小数点数表現、特定の文字列の文字通りパターン、脱出のルールなど)は付属していません。
キーワードを指定する機能と、正規表現でトークンパターンを指定する機能の両方をどのように取得しますか?
解決
私は書いただけです RegexParsers
- 派生したパーサーですが、私がしていることは次のことです:
val name: Parser[String] = "[A-Z_a-z][A-Z_a-z0-9]*".r
val kwIf: Parser[String] = "if\\b".r
val kwFor: Parser[String] = "for\\b".r
val kwWhile: Parser[String] = "while\\b".r
val reserved: Parser[String] = ( kwIf | kwFor | kwWhile )
val identifier: Parser[String] = not(reserved) ~> name
所属していません StackOverflow