Scala パーサー コンビネーターを使用しているときに、レクサーからパーサーへの一連のトークンをフィルター処理するにはどうすればよいですか?
説明させてください - Lexer (extending StdLexical
) と Parser ( extending ) のかなり標準的なパターンがあるとしStdTokenParsers
ます。lexer は一連の文字を一連のトークンに変換し、次にパーサーは一連のトークンを抽象構文木 (タイプExpr
) に変換します。
ストリームのどこにでも発生する可能性のあるいくつかのトークンをフィルターで除外するオプションが必要であると判断したため、これらのトークンを削除するためにレクサーとパーサーの間に収まる関数が必要です。たとえば、レクサーでコメントをトークン化し、後でこれらのコメントを除外することができます。
このフィルターを作成する最良の方法は何ですか? これは、パーサー コンビネーターのイディオムを使用できますが、そうする必要はありません。
サンプルの現在のコード:
val reader = new PagedSeqReader(PagedSeq.fromReader(reader))
val tokens = new MyParser.lexical.Scanner(reader)
val parse = MyParser.phrase(parser)(tokens)
私はこのようなものを書くことができるようにしたいと思います:
val reader = new PagedSeqReader(PagedSeq.fromReader(reader))
val tokens = new MyParser.lexical.Scanner(reader)
val parse = MyParser.phrase(parser)(filter(tokens))