レガシーCコードの構文解析の試み(SES2024) On parsing legecy C code

thumb image

先日慶應大学日吉キャンパスにて開催された IPSJ/SIGSE Software Engineering Sympodium (SES2024) にて、以下の内容のポスター発表を行いました。

レガシーシステムにありがちな、ヘッダファイルが欠けている状況において、ソースコードを構文解析する試みについて説明する。通常Cソースコードの構文解析には依存するヘッダファイルが必要となるが、参照できないヘッダファイルが存在し、さらにそれらが通常のC構文を逸脱するようなマクロを定義している場合、通常のコンパイラフロントエンドでは全く対処することができなくなる。このような場合、ある程度の構文エラーを許容するtree-sitterやsrcML等の特殊な構文解析ツールを利用することが考えられるが、当然ながら構文エラーとなったコード断片に対しては構文木は得られず、対象によってはそのようなコード断片の量が無視できないほどとなってしまう。これに対処するため、通常のC言語のLR(1)構文解析器に対し、構文を逸脱したマクロ使用に対応する構文規則を追加し、さらに字句をバッファリングしつつ分類する字句バッファを追加したプロトタイプを試作した。このプロトタイプを用いて、1980年代に作られたレガシーエディタから最近の主要なブラウザまで、約5500万行のソースコードを構文解析できることが確認できた。

Members