第85回情報処理学会全国大会 第5回中高生情報学研究コンテスト
チーム名:鈴田夏都季
早稲田大学高等学院
鈴田夏都季さん(3年)
(2023年3月取材)
今回私はDNCL(2011年度時点の仕様)をPythonに翻訳するプログラムを作成した。DNCL(正式名称:共通テスト手順記述標準言語)とは、大学入学共通テスト情報関係基礎にて使用されている日本語記述型の疑似言語である。
日本での情報教育の徹底が求められる中、プログラミング学習のハードルは未だ高いままである。プログラミングの学習ハードルを高めている要因の一つとして、プログラムが英語で記述されていることが挙げられる。この問題を根本的に解決するためには、日本語でのプログラミングの可能化が必要であると考える。
本研究は、DNCLを疑似言語から実機で動く言語に発展させることだけでなく、DNCL・Python間の文法体系の差の実践的な学習を可能にし、スムーズなプログラミング学習を実現することを目的としている。また、本翻訳プログラムは、DNCLをその仕様書に忠実に実行することを目的とし、Pythonを中間言語として扱うトランスパイラのような位置づけとしている。
※クリックすると拡大します。
■今回発表した研究を始めた理由や経緯を教えてください。
私は高校2年生の始めごろに初めてプログラミング学習を始め、中でも競技プログラミングに心を惹かれました。競技プログラミングをする同志を求めて、同級生何人かに勧めてみたのですが、「難しそう」と一蹴されてしまうことが多々ありました。
多くの人がプログラミング学習に対して高いハードルを感じているのではないかと、その時思いました。また、プログラムが英語で記述されているという点が、原因の一つになっているだろうとも思いました。そこで、日本語でのプログラミングが可能になれば、プログラミング学習のハードルが幾分か低下するだろうと思い、今回の研究に取り掛かりました。
■今回の研究にかかった時間はどのくらいですか。
翻訳プログラムの実装に約半年、テストデータの作成やテストラン、実行結果の精査、コーナーケース(起こることは稀だがミスが発生しやすそうなケース)を踏まえたテストランなどに2か月ほど、計8か月ほどで作成を行いました。
■今回の研究ではどんなことに苦労しましたか。
前にも述べた通り、私は主に競技プログラミングしかやっておらず、今回のような大きなプログラムの作成は初めてだったので、苦労の連続でした。
特に、論理演算子の優先順位差や、配列型変数の宣言などの翻訳過程に苦労しました。要件定義やプログラムの設計書を作ったのも初めてだったので苦労しましたが、良い経験になりました。
■「ココは工夫した!」「ココを見てほしい」という点を教えてください。
今回の翻訳プログラムで特に工夫をした点は、「論理演算子の優先順位翻訳」「次元数や要素数が指定されない配列型変数の翻訳」の2つです。
前者については、論理演算子を見つけるたびに論理式の該当する部分を( )で囲む、という方針で翻訳を行いました。簡単に言えば、常に左側の演算子が優先的に実行されるPythonプログラムになるように翻訳を行ったということです。
後者については、配列型変数に対してアクセスが行われるたびに、その必要次元数を更新し、要素数についてはPythonライブラリのdefaultdictを用いることで解決を行いました。(defaultdictはhashを用いた辞書型のようなものです)。
具体的な実装が気になる方は、以下URLより私のGitHubページに飛ぶと、ソースコード・テストデータ・テストランの結果などのデータを見ることができます。ぜひ見てみてください!
https://github.com/k1suxu/DNCL-Python-Translator
■今後「こんなものを作ってみたい!」「こんな研究をしてみたい」と思うことがあれば教えてください。
今後は、今回作成した翻訳プログラムの機能拡張をしながら、より柔軟な記述が可能である日本語プログラミングの実現を目標に、研究を続けていきたいと思っています。
現在のように決定的なアルゴリズムを用いた翻訳機の作成を進めるとともに、深層学習・AIなどの技術を用いた翻訳モデルの作成も行ってみたいと考えています。
研究がある程度進んだ暁には、小中学校などで実地検証を行い、修正点・改善点を見つけて適宜修正を繰り返し、より便利な翻訳機+日本語プログラミング環境作成を目指し頑張っていきたいと思います。
鈴田さんの発表は、奨励賞を受賞しました。