科学技術計算用プログラミング言語:Sci-Lispの自作(2日目):VSCode拡張機能開発・正規表現との格闘
Sci-Lisp開発の2日目記録です。
GitHubにも上げているとおり、まずは言語のexampleを考えました。
いずれ、字句解析・構文解析をすることになると思われるので、まずはVSCodeでSci-Lispシンタックスハイライトをできるようにしておきたいと思いました。 VSCodeの拡張機能開発については、公式ドキュメントや他のブログでも多数掲載されているのでそちらをごらんください。
ハマったポイントとしては、例えば複素数(1.0 + 2.3jなど)を完璧に識別するためにはかなり複雑な正規表現を書かなければならないということでした。私はSci-Lispにおける複素数は以下の正規表現で識別するとしました。(ほかにもっと良い書き方があるかもしれません)
{ "name": "constant.numeric.complex.lisp", "match": "(([-+]?(?:\\d+\\.\\d*|\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?[-+])?(?<![-+])[-+]?(?:\\d+\\.\\d*|(?<!\\d+)\\.\\d+|\\d+)(?:[eE][-+]?\\d+)?[jJ])" },
ためしにシンタックスハイライトさせてみた例が以下の画像です。不正な複素数ははじき、様々なパターンの複素数は橙色に色付けされています。