プログラムの提出指針

コンパイラの作成演習において,プログラムをラボのssh.cis.k.hosei.ac.jp上へ提出してもらいます.提出するプログラムは,以下の指針に沿った形でプログラミングを行なって下さい.

利用しているツール毎に,指針が書かれていますので

を参照して下さい.

提出先に関しては,こちらを参照して下さい.

ソースプログラムの形式について

Yacc/Lex(Bison/Flex)の場合

ソースコードの文字コード

コメント内も含めて日本語コードは,使わないで下さい. ソースの文字コードとLinuxのデフォルト文字コードの組合せによっては,エラーメッセージなどが文字化けします.

入出力

皆さんがYacc/Lex(Bison/Flex)を用いて作成するコンパイラには,標準入力からソースプログラムを読み込み,標準出力へオブジェクトコードを出力する機能を必ずつけて下さい.具体的には,
-ly -llオプションを使う場合
デフォルトで用意されているmain関数,yyerror関数を使って,プログラミングして下さい.しかし,ssh.cis.k.hosei.ac.jpは,以下のにある「-ly -llオプションを使えない場合」に当たりますので,以下の要領でプログラミングして下さい.
-ly -llオプションを使えない(使わない)場合(ssh.cis.k.hosei.ac.jpは,こちらです.)
main関数,error関数をこの”OS依存について”を参考にして,標準入力からソースコードを読み込み,標準出力からオブジェクトコードを出力するように,プログラミングをして下さい.この仕様を満たすだけの機能を持つmain関数,yyerror関数の例は,以下の通りです.lexのソースには,%option noyywrapを忘れずに記述しておいて下さい.
       int   main(void){
         yyparse();
         return(0);
       }
       int yyerror(char * err_str){
         fprintf(stderr,err_str);
       }
       

ディレクトリ構成

2005年度入学のコンピュータサイエンス学科99番の学生がソースコードを提出する場合を例に説明します.ここでは,提出用ディレクトリにSrcが指定されているとします.
Yacc(Bison)のソース
cs05k0099.yという名前でSrcにコピーして下さい.
Lex(Flex)のソース
cs05k0099.lという名前でSrcにコピーして下さい.
その他のファイル(インクルードされるファイルなど)
Src/cs05k0099inc(←ディレクトリです)にコピーして下さい.
Srcには,空のファイルで書き込み権だけが与えられたcs05k0099.yとcs05k0099.lが既にあります.これらのファイルは,提出済みのファイルが他人にコピーされない様に,用意されています.しかし,他人が上書きすることは,可能ですので,誤って他人のファイルへ上書きしてしまうと,自分自身が未提出扱いになるだけでなく,苦労して作成したプログラムが上書きされた学生の評価に使われますので気をつけて下さい.
各自で作成したインクルードファイルに関して
Src/cs05k0099incにファイルを置く場合(不要なファイルは置かないこと!)は,他人が読み出せるモードにしてファイルを置いて下さい.たとえば,アプリケーション(アクセス)サーバにログインし,
chmod 644 どこかのディレクトリ/Src/cs05k0099inc/*
などとして下さい.

コンパイル方法

以下の手順でコンパイルおよび検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順でコンパイル出来ることを確認の上,提出して下さい. コンパイルの確認は,各自のディレクトリで行なって下さい.
	    bison -y -d cs05k0099.y
	    flex cs05k0099.l
	    cc y.tab.c -o cs05k0099.bin
各自で用意したインクルードファイルは,#include "cs05k0099inc/ファイル名"でインクルードして下さい.
改行コードに関して
各自の開発環境によって,改行コードに違いがあります.たとえば
unix系
LF(Line Feed)のみ
Windows
CR LF (Carriage Return & Line Feed) の両方
Mac
CR (Carriage Return) のみ
となっています.bison/flexでは,改行コードが違うプログラムは,コンパイル時にエラーとなります.そこで,Linuxのようなunix系以外のOSで開発したプログラムを提出する場合は,コンパイル前に,以下のコマンドを用いて改行コードを変換してからコンパイルして下さい.
	    nkf -Lu あなたのソースファイル > 提出用ソースファイルあなたのソースファイルは,yacc/lex(bison/flex)のソースファイルです.)
この提出用ソースファイルを用いてコンパイルし,動作確認後,提出をして下さい.また,Cygwinの場合,インストール時の設定により,この変換の要,不要が異なります.改行コード関連('\r'など)のエラーが出た時は,必ず変換して下さい.

実行方法

以下の手順で実行および検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順で実行出来ることを確認の上,提出して下さい. 実行の確認は,各自のディレクトリで行なって下さい.
	    ./cs05k0099.bin < src > obj
            hsm -f obj

JavaCC/Javacの場合

ソースコードの文字コード

コメント内も含めて日本語コードは,使わないで下さい. ソースの文字コードとjavaコンパイラのデフォルト文字コードの組合せや使われている文字によっては,誤動作するおそれがあります.

入出力

皆さんがJavaCC/Javacを用いて作成するコンパイラには,引数で指定したファイルからソースプログラムを読み込み,標準出力へオブジェクトコードを出力する機能を必ずつけて下さい.具体例が,”JavaCCの具体的な使い方の例”にありますので,これを参考にしてプログラムをして下さい.

ディレクトリ構成

2007年度入学のデジタルメディア学科199番の学生がソースコードを提出する場合を例に説明します.ここでは,提出用ディレクトリにSrcが指定されているとします.
JavaCCのソース
dm07k1199.jjという名前でSrcにコピーして下さい.
その他のファイル(パッケージのソースなど)
Src/dm07k1199pkg(←ディレクトリです)にコピーして下さい.
Srcには,空のファイルで書き込み権だけが与えられたdm07k1199.jjが既にあります.これらのファイルは,提出済みのファイルを他人が勝手にコピーをしないように,用意されています.しかし,他人が上書きすることは,可能ですので,誤って他人のファイルへ上書きしてしまうと,自分自身が未提出扱いになるだけでなく,苦労して作成したプログラムが上書きされた学生の評価に使われますので気をつけて下さい.
各自で作成したパッケージファイルに関して
Src/dm07k1199pkgにファイルを置く場合(不要なファイルは置かないこと!)は,他人が読み出せるモードにしてファイルを置いて下さい.たとえば,アプリケーション(アクセス)サーバにログインし,
chmod 644 どこかのディレクトリ/Src/dm07k1199pkg/*
などとして下さい.各自で用意したパッケージファイルは,import dm07k1199pkg.*;でインポートして下さい.

クラス名

JavaCCのソースから作られるJavaのソースファイル名やクラスファイル名が学生間で重複しないように,dm07k1199で始まるファイルにします.そのためには,以下のサンプルのようにJavaCCのソースファイルを記述して下さい.
       PARSER_BEGIN(dm07k1199)
       import java.io.*;
       import dm07k1199pkg.*; ←必要ならば書く

       public class dm07k1199{
       <必要な宣言などの始まり>
                 :
                 :
       <必要な宣言などの終り>
         public static void main(String args[]){
       <必要な宣言などの始まり>
                 :
                 :
       <必要な宣言などの終り>
           try{
             dm07k1199 parser = new dm07k1199( new FileReader(args[0]));
       <必要なプログラムなどの始まり>
                 :
                 :
       <必要なプログラムなどの終り>
           }
           catch(Exception ex){
             System.err.println("Failed to parse:"+ex.getMessage());
           }
         }
       }
       PARSER_END(dm07k1199)
       <必要なプログラムなどの始まり>
                 :
                 :
       <必要なプログラムなどの終り>

コンパイル方法

以下の手順でコンパイルおよび検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順でコンパイル出来ることを確認の上,提出して下さい. コンパイルの確認は,各自のディレクトリで行なって下さい.
            javacc dm07k1199.jj
            javac  dm07k1199.java
各自で用意したパッケージファイルは,import dm07k1199pkg.*;でインポートして下さい.
改行コードに関して
各自の開発環境によって,改行コードに違いがあります.たとえば
unix系
LF(Line Feed)のみ
Windows
CR LF (Carriage Return & Line Feed) の両方
Mac
CR (Carriage Return) のみ
となっています.JavaCCでは,改行コードが違うプログラムは,コンパイル時にエラーとなります.そこで,Linuxのようなunix系以外のOSで開発したプログラムを提出する場合は,コンパイル前に,以下のコマンドを用いて改行コードを変換してからコンパイルして下さい.
	    nkf -Lu あなたのソースファイル > 提出用ソースファイルあなたのソースファイルは,JavaCCのソースファイルです.)
この提出用ソースファイルを用いてコンパイルし,動作確認後,提出をして下さい.また,Cygwinの場合,インストール時の設定により,この変換の要,不要が異なります.改行コード関連('\r'など)のエラーが出た時は,必ず変換して下さい.

実行方法

以下の手順で実行および検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順で実行出来ることを確認の上,提出して下さい. 実行の確認は,各自のディレクトリで行なって下さい.
            java dm07k1199 src > obj
            hsm -f obj

Jay/JFlexの場合

ソースコードの文字コード

コメント内も含めて日本語コードは,使わないで下さい. ソースの文字コードとjavaコンパイラのデフォルト文字コードの組合せや使われている文字によっては,誤動作するおそれがあります.

入出力

皆さんがJay/JFlexを用いて作成するコンパイラには,引数で指定したファイルからソースプログラムを読み込み,標準出力へオブジェクトコードを出力する機能を必ずつけて下さい.具体例が,”サンプルコードとコンパイル方法”にありますので,これを参考にしてプログラムをして下さい.

ディレクトリ構成

2009年度入学のデジタルメディア学科9番の学生がソースコードを提出する場合を例に説明します.ここでは,提出用ディレクトリにSrcが指定されているとします.
Jayのソース
dm09k1009.jayという名前でSrcにコピーして下さい.
JFlexのソース
dm09k1009.flexという名前でSrcにコピーして下さい.
その他のファイル(パッケージのソースなど)
Src/dm09k1009pkg(←ディレクトリです)にコピーして下さい.
Srcには,空のファイルで書き込み権だけが与えられたdm09k1009.jayとdm09k1009.flexが既にあります.これらのファイルは,提出済みのファイルを他人が勝手にコピーをしないように,用意されています.しかし,他人が上書きすることは,可能ですので,誤って他人のファイルへ上書きしてしまうと,自分自身が未提出扱いになるだけでなく,苦労して作成したプログラムが上書きされた学生の評価に使われますので気をつけて下さい.
各自で作成したパッケージファイルに関して
Src/dm09k1009pkgにファイルを置く場合(不要なファイルは置かないこと!)は,他人が読み出せるモードにしてファイルを置いて下さい.たとえば,アプリケーション(アクセス)サーバにログインし,
chmod 644 どこかのディレクトリ/Src/dm09k1009pkg/*
などとして下さい.各自で用意したパッケージファイルは,import dm09k1009pkg.*;でインポートして下さい.

クラス名

Jay,JFlexのソースから作られるJavaのソースファイル名やクラスファイル名が学生間で重複しないように,dm09k1009で始まるファイルにします.そのためには,以下のサンプルのようにJayとJFlexのソースファイルを記述して下さい.
Jayのソース
       %{
       import java.io.*;
       import dm09k1009pkg.*; ←必要ならば書く
       public class dm09k1009Parser {
       %}
       <必要な宣言などの始まり>
                 :
                 :
       <必要な宣言などの終り>
       %%
       <必要な宣言などの始まり>
                 :
                 :
       <必要な宣言などの終り>
       %%
       public static void main(String[] args) throws IOException {
           FileReader source = new FileReader(args[0] );
           dm09k1009Scanner scanner = new dm09k1009Scanner(source);
           dm09k1009Parser yyparser = new dm09k1009Parser();
           try {
               yyparser.yyparse(scanner);
           } catch (dm09k1009Parser.yyException ye) { System.out.println(ye); }
       }
       <必要なプログラムなどの始まり>
                 :
                 :
       <必要なプログラムなどの終り>
       }

JFlexのソース
       import java.io.*;
       %%
       %public
       %class  dm09k1009Scanner
       %implements  dm09k1009Parser.yyInput

       %type   int
       %eofval{
              return YYEOF;
       %eofval}

       %{
       private  int  token;
       public boolean advance () throws java.io.IOException {
       token=yylex();
       return token != YYEOF;
       }
       public  int  token () {
           return token;
       }
       public  Object  value () {
           return value;
       }
           Object  value;  //字句規則部でここに値を代入する
       %}
       digit = [0-9]
       other = .

       %%

       <必要な宣言などの始まり>
                 :
       たとえば...
       "+"     { return(dm09k1009Parser.ADDOP); }
       {digit}+   { value=new Integer(yytext()); return(dm09k1009Parser.NUMBER); }
       [ \t]     { }
       "\n"     { return(dm09k1009Parser.NL); }
                 :
       <必要な宣言などの終り>

コンパイル方法

以下の手順でコンパイルおよび検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順でコンパイル出来ることを確認の上,提出して下さい. コンパイルの確認は,各自のディレクトリで行なって下さい.
下記サイトにアクセスし、jar ファイルをダウンロード。
jay ファイルと同じ場所に置きます。
http://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html
        Downloads 
                   ・ archive with executable and skeletons for MacOS X, 52 kb
        これ ->    ・ archive with class files and skeletons for any Java VM, 520 kb, thanks to Alliet and Megacz' nestedvm
                   ・ source files, 224 kb 
コマンドプロンプトやターミナルを開き、jay ファイルを作った場所まで移動し、以下のコマンドを実行。
Windows の場合、フォルダを開きファイルを選択していない状態で、Shift + 右クリック -> [コマンド ウィンドウをここで開く] を使うと便利。
            java -jar jay.jar dm09k1009.jay > dm09k1009Parser.java
            jflex dm09k1009.flex
            javac  dm09k1009Parser.java
            javac  dm09k1009Scanner.java
各自で用意したパッケージファイルは,import dm09k1009pkg.*;でインポートして下さい.
改行コードに関して
各自の開発環境によって,改行コードに違いがあります.たとえば
unix系
LF(Line Feed)のみ
Windows
CR LF (Carriage Return & Line Feed) の両方
Mac
CR (Carriage Return) のみ
となっています.Jay/JFlexでは,改行コードが違うプログラムは,コンパイル時にエラーとなります.そこで,Linuxのようなunix系以外のOSで開発したプログラムを提出する場合は,コンパイル前に,以下のコマンドを用いて改行コードを変換してからコンパイルして下さい.
	    nkf -Lu あなたのソースファイル > 提出用ソースファイルあなたのソースファイルは,Jay/JFlexのソースファイルです.)
この提出用ソースファイルを用いてコンパイルし,動作確認後,提出をして下さい.また,Cygwinの場合,インストール時の設定により,この変換の要,不要が異なります.改行コード関連('\r'など)のエラーが出た時は,必ず変換して下さい.

実行方法

以下の手順で実行および検証をしますので,ssh.cis.k.hosei.ac.jpにおいて,同様の手順で実行出来ることを確認の上,提出して下さい. 実行の確認は,各自のディレクトリで行なって下さい.
            java dm09k1009Parser src > obj
            hsm -f obj

提出先について

ラボのファイルサーバの以下の場所にコピーして下さい.(Nは,問題番号に読み変えること.)
(Linuxでのパス:ssh.cis.k.hosei.ac.jpは,こちら)
/mnt/shared/SubmitShared/hiraki/submit/ProblemN/Src/
(Windowsでのパス)
P:\hiraki\submit\ProblemN\Src\

hiraki@cis.k.hosei.ac.jp
Last modified: 2010/06/16 17:53