見出し画像

114. DTDL Generator の日本語文字化けを直す ~ その後

前回の記事                        次回の記事

はじめに

前回の記事で、文字化けの原因が、YaccLextTools という、ernstc/YaccLexTools: This package includes GPPG and GPLEX tools for compiling YACC and LEX source files in your C# project. Useful if you want to create a compiler, a transpiler or interpret a formal language. が開発サイトの NuGet Package にあるとわかり、修正方法も提案しつつ、Issue 登録しました。「治ったぜ!」と意気揚々、とりあえずの修正を施して再度、DTDL Generator を実行したら…あら?何も生成されない!という事態に。

とほほ。

ということで、今回も、文字化け問題の Fix に取り組むことにしました。

ソフトウェア構成振り返り

話が込み入ってきているので、DTDL Generator や YaccLextTools がどんな構成になっているのかを、まず明確にすることから始めますね。

ソフトウェア構成

こんな風になっています。YaccLexTools の文字化け問題を発見したのは、SampleModelGenerator(コンソールアプリ)のデバッグ実行によるもの。
YaccLexTools による字句解析(.lex)、構文解析(.y)のファイルを作成してビルドすると、GplexBuffers.cs というファイルが自動的に出来上がり、そのファイルのなかでの文字列の扱いが問題を引き起こしていたことを SampleModelGenerator のデバッグ実行と、その過程で発見した仮説を検証するための小さなプログラムによる詳細な検証で、問題の原因と対策方法を発見したわけです。

SampleModelGenerator は、Kae.XTUML.Tools.CIModelResover というプロジェクトを参照して作られていて、その Kae.XTUML.Tools.CIModelResover が YaccLexTools で字句解析・構文解析を実装しています。
さらに、Kae.XTUML.Tools.CIModelResover は NuGet パッケージ化されてオープンソースライブラリとして公開され、NuGet パッケージとして、DTDL Generator の本体である、Kae.XTUML.Tools.Generator.DTDL で参照され、このライブラリプロジェクトを、Kae.XTUML.Tools.WpfAppDTDLGenerator という WPF アプリケーションがプロジェクト参照して、BridgePoint で描いたモデルの情報を DTDL を使った Twin Model の定義に変換するという構成になっています。

残っていた問題点

前回の記事では、YaccLexTools の文字化け問題について、発見した原因と暫定対策を元に、SampleModelGenerator で一時的な確認を行いました。
ここでは、日本語を含む文字列が、問題なく字句解析で切り出されていたので、対策は有効だったと判断しました。

DTDL Generator が機能しない問題

そこで、Kae.XTUML.Tools.CIModelResover を Release モードでビルドし、NuGet パッケージを作成して NuGet.org から公開しました。

このパッケージを、Kae.XTUML.Tools.WpfAppDTDLGenerator に組み込んで試してみたところ、まったく DTDL ファイルが生成されませんでした。

が~ん。。。

なぜなのか調べてみると、Kae.XTUML.Tools.CIModelResover が抽出するべき、概念モデル情報が一切抽出されていない!
ということで、再度、Kae.XTUML.Tools.CIModelResover の確認に逆戻り。

とほほ。。。

SampleModelGenerator による再確認

再度、SampleModelGenerator に戻って実行結果を隅から隅まで確認すると、字句解析はできているが、構文解析の途中で例外発生して途中で終わっていることを発見。

ここから先は

7,553字 / 5画像

2022年3月にマイクロソフトの中の人から外の人になった Embedded D. George が、現時点で持っている知識に加えて、頻繁に…

この記事が気に入ったらチップで応援してみませんか?