C5-3

Haskell の構文解析結果を用いた拡張性を考慮した学習支援システムの開発
Development of a Scalable Learning Support System Using Haskell Parsing
Results藤井 陸*1, 香川 考司*2
Riku FUJII*1, Koji KAGAWA*2*1
香川大学院工学研究科*1
Graduate School of Engineering. Kagawa University*2
香川大学創造工学部*2
Faculty of Engineering and Design. Kagawa University
Email: s21g474@kagawa-u.ac.jp
あらまし： 本研究では、Haskell を用いた拡張性を考慮した C 言語学習支援システムを開発した。関連研
究の C 言語学習支援システムは、構文解析の結果を扱うことが難しく支援できる機能に限界があり調査項目の拡張性にも優れていないという課題があった。そこで本研究では、教育者が状況に合わせて調査項目の追加・削除、フィードバック内容を変更ができるシステムを開発する。柔軟なフィードバックを与えることで修正方針が立ちやすくなると考える。
キーワード：構文解析，Web ベース，拡張性，プログラミング学習支援

1.

はじめにプログラミング初学者は、修正すべき箇所に気づかず箇所を修正し続けることがある。これは、コンパイルエラーのメッセージを理解できないことが原因の 1 つである。これは、プログラミング学習への意欲低下や学習効率の低下、挫折の可能性に繋がる。
また初学者は冗長なコードの提出を作成することが多く、その提出は教員や TA の採点の負担の増加にも繋がる。
この問題点を解決するための先行研究として CHelper を用いた Web ベースの C 言語開発環境の構築(1)と構文解析と手書き入力機能を用いた C 言語添削支援システムの開発(2)が挙げられる。
前者では、C 言語初学者向けの静的解析ツールでもともと Eclipse のプラグインであった C-Helper(3)を利用して Web ベースのシステムを実装している。ソースコードの問題点を分かりやすいエラーメッセー
ジで表示し、解決策を提示することでプログラミン
グ学習を支援している。Web ベースにすることで、学習者の開発環境に依存せず、インターネットに繋がっていれば誰でも使用できるシステムであった。
しかし問題点として、システムの実装に Java を用いているため、構文解析結果を扱うことが難しく調査項目の拡張性が難しいことが挙げられた。
後者は、学習者の学習効率の向上・指導者の負担軽減を図るため、チャットツールを用いて学習者とリモートでやり取りを行える指導者用のソースコー
ド添削支援システムと、学習者用の質問受付、ソースコードの修正を支援するシステムである。ソース
コードの構文解析に Haskell で開発された一般的なC 言語のパーサを提供するパッケージである
language-c-quote を用いておりシステムの拡張性を高めることを考慮している。しかし、添削には教育者の目視による確認を前提としたシステムであり、学習者がフィードバックをすぐに得ることを目標とした本システムとは方向性が異なる。
そこで、本研究では調査項目の拡張が容易に行うことができ、学習者に分かりやすいメッセージと修正案を即座に提供できる C 言語学習を支援するシステムの開発を目指す。

2.

Haskell を用いた構文解析

本研究で開発したシステムは、Haskell の一般的なC 言語のパーサを提供する Haskell パッケージである language-c-quote を用いてソースコードの構文解析を行う。language-c-quote が提供するパーサは、構文木操作が記述しやすいような解析結果を出力するため拡張性に期待できると考えた。
さらに、language-c-quote は専用の構文で、Haskell
ソースコード内に C 言語のソースコードを記述することができる QuasiQuotation の機能を備えている。
これは、C 言語のソースコード生成が他のパッケージよりやりやすくなっている。学習者に修正案を提示する際に、この機能が利用できると考えた。
開発言語として Haskell を選択する利点として以下のようなことが挙げられる。
・・3.

― 231 ―

パターンマッチングと型推論により、簡潔に関数を定義することができる。
関数の独立性が高く、関数の部品化と組み合わせが容易になる。

システム概要本システムは、学習者の送信したソースコードに

教育システム情報学会 JSiSE2021
第46回全国大会
2021/9/1-9/3

対して調査を行い問題点と解決策を即座に提示することでプログラミング学習を支援する。教育者には、学習者のソースコードを調査する項目とフィードバックの内容を自由に変更する機能を提供する。
Web ベースのシステムとなっており、学習者と教育者はそれぞれ別々のページからシステムを操作する。学習者は入力フォームから C 言語のソースコードを送信する。ソースコードの構文解析と調査、調査項目の拡張はサーバ側で行う。学習者には、ソースコードの問題点とその解決策をブラウザ上に表示する。教育者は、拡張したい調査項目をプログラムとして記述したものをフォームから送信する。現バージョンでは、Haskell による拡張部の実装が完成していないが、JavaScript で構文などを指定することで調査項目の拡張を行うことができるようになっている。

4.

5.

おわりに

本研究では、拡張性を考慮した C 言語学習支援システムの開発を目標にして、教育者が調査項目の追加・削除、フィードバックの内容を柔軟に変更できる機能と学習者の送信したソースコードに対して調査を行い問題点と解決策を即座に提示する機能を持ったシステムを開発した。
本研究室の大学院生３名を対象に本システムの評価を行なった。本システムの学生用ページと調査項目拡張用のページを使用してもらい、その後システムの操作性などについてのアンケートに回答してもらった。肯定的評価は、調査項目拡張がプログラマブルに行えることが挙げられた。しかし、システムの問題点として、以下が挙げられた。
・システム実装

本研究では、学習者のソースコードを構文解析し調査項目に従い調査し学習者にフィードバックする機能と、教育者が調査項目の内容を追加したり削除したりできる機能を Web ベースで実装した。本シス
テムの構成イメージを図１に示す。学習者がソースコードを送信するとサーバの構文解析部で構文解析が行われ、解析結果をソースコード調査部で調査し調査結果を学習者に提示する。教育者が調査項目の追加または削除を行うと、サーバの機能拡張部で受け取りソースコード調査部の調査項目を変更する。
本システムの実装には、型安全で RESTful な高性
能 Web アプリケーションを効率的に開発するための Haskell で書かれた Web アプリケーションフレー
ムワークの Yesod を用いている。本システムは、Yesod で提供されるテンプレート言語の Shakespeareを用いた View の実装と Web サーバの構築やルーティングの管理などのバックエンドの処理を Yesod で行なっている。構文解析には language-c-quote のパーサを利用する。構文解析結果は、他言語でも扱いやすいような形に変換するために JSON に変換する。
この JSON を JavaScript により解析する。

・

送信された C 言語のソースコードが構文エラーになる場合は、学習者に理解できるメッセージが生成されない。
システムの多くが Haskell で実装されているが、調査項目の拡張には JavaScript の知識が必要である。

構文エラーに対応するためには、language-c-quoteで提供されるパーサを改良することが必要である。
Bison のエラーからの回復処理から着想を得ることで構文エラーに対応することができると考えている。
しかし、C 言語の全ての文法の構文エラーに対応することは難しいため、C 言語初学者がよく使う文法に絞ることが必要である。調査項目の拡張にはJavaScript に加えて Haskell での拡張を可能にするよう実装する予定である。これは、Yesod の Developper用サーバの自動リロード機能を用いることや、Haskell から JavaScript へのコンパイラの１つであるHaste を用いることで実現ができると考えている。また、調査項目の拡張に毎回ソースコードを入力するのは煩雑である。よく使用される調査項目には、必要な値の入力フォームだけで追加できるような仕組みを作ることで、操作性の向上に繋がると考えている。簡単な拡張であれば JavaScript や Haskell の知識も必要なくなる。
参考文献

図 1 本システムの構成図(1) 島川 大輝, 香川 考司, “C-Helper を用いた Web ベースの C 言語開発環境の構築”, 教育システム情報学会第 49 回全国大会(JSiSE2015) 講演論文集, A3-1
(2015)(2) 木村 光星, 香川 考司, “構文解析を用いた C 言語指導コメント支援システムの構築”, 教育システム情報学会(JSiSE) 2018 年度 第 4 回研究会 (2018)(3) 内田公太, 権藤克彦. “C 言語初学者向けツール CHelper の現状と展望.” 情報処理学会第 54 回プログ
ラ ミ ン グ ・ シ ン ポ ジ ウ ム 予 稿 集 2013, pp.153-160(2013)― 232 ―