2016-06-28 1 views
2

SQLのように、大文字と小文字を区別しないキーワード(および/または識別子)を持つ言語もあります。 TokenParsersを使用している場合、このケースをどのように扱うことができますか? 1つの選択肢はすべての可能な組み合わせのキーワードを生成することですが、多くのキーワードがある場合(これはどういうわけかスタックオーバーフローが発生してwhitespaceになりました!)、いずれの場合でも識別子では機能しません。Scalaパーサーコンビネータで大文字小文字を区別しないキーワードを扱う方法

[セルフ答える他の希望の誰かではこの日費やしてしまうことはありません。]

答えて

2

これはprocessIdentをオーバーライドすることで行うことができます(SQLの通常のように、キーワードは大文字で与えられていると仮定):

override protected def processIdent(name: String) = { 
    val upperCased = name.toUpperCase 
    if (reserved contains upperCased) Keyword(upperCased) else Identifier(upperCased) 
} 
関連する問題