% ファイル先頭から\begin{document}までの内容（プレアンブル）については，
% 基本的に { } の中を書き換えるだけでよい．
\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,
               a4j,11pt]{bxjsarticle}

%%======== プレアンブル ============================================%%
% 用紙設定：指示があれば，適切な余白に設定しなおす
\RequirePackage{geometry}
\geometry{reset,paperwidth=210truemm,paperheight=297truemm}
\geometry{hmargin=25truemm,top=20truemm,bottom=25truemm,footskip=10truemm,headheight=0mm}
%\geometry{showframe} % 本文の"枠"を確認したければ，コメントアウト

% 設定：図の挿入
% http://www.edu.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_figure
\usepackage{graphicx}

% 設定：ソースコードの挿入
% http://www.edu.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_fvextra
\usepackage{fvextra}
\renewcommand{\theFancyVerbLine}{\texttt{\footnotesize{\arabic{FancyVerbLine}:}}}
\fvset{breaklines=true, breakanywhere=true}  % fvextraが必要．fancyvrbではエラーになる．

% 設定：ソースコードをfloat扱いするための環境の定義
%       図1, 図2, ... のように，Listing 1, Listing 2, ... とすることができる．
\usepackage{newfloat}
\DeclareFloatingEnvironment[name=Listing, fileext=lol]{eopcode}

%%======== レポートタイトル等 ======================================%%
% ToDo: 提出要領に従って，適切なタイトル・サブタイトルを設定する
\title{プログラミング演習1 レポートA\\        % タイトル
       |\Large{C言語による構文解析の基本}|}   % サブタイトル

% ToDo: 自分自身の氏名と学生番号に書き換える
\author{氏名: 原 直 (HARA, Sunao) \\
        学生番号: 0941xxxx}

% ToDo: レポート課題等の指示に従って適切に書き換える
\date{出題日: 20xx年xx月xx日 \\
      提出日: 20xx年xx月xx日 \\
      締切日: 20xx年xx月xx日 \\}  % 注：最後の\\は不要に見えるが必要．


%%======== 本文 ====================================================%%
\begin{document}
\maketitle
% 目次つきの表紙ページにする場合はコメントを外す
%{\footnotesize \tableofcontents \newpage}

%% 本文は以下に書く．課題に応じて適切な章立てを構成すること．
%% 章＝\section，節＝\subsection，項＝\subsubsection である．

    \textbf{\small※執筆上の注意：本書は空想上の課題に対するレポートの
    執筆例である．章の構成と書くべき内容の参考として提示するもの
    であるため，課題内容やプログラムの仕様などは，
    実際の演習課題の指示に従って適切にまとめ直す必要がある．
    文や文の一部を「・・・」や「??」によって省略している箇所があるが，
    これに穴埋めをするだけで，レポートが完成するわけではない．
    なお，サンプルと同じ書き出しで文章を書く必要もない．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

%--------------------------------------------------------------------%
\section{概要} \label{sec:abstract}
    \textbf{\small※執筆上の注意：
    演習課題説明書を読み，本レポートとして実施した課題が分かるように書く．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

本演習では・・・を作成する・・・．
・・・のため，・・・・をおこなう．

本レポートでは，演習中に取り組んだ課題として，
以下の課題??から課題??についての内容を報告する．

\begin{description}
  \item[課題1] Linux環境におけるC言語プログラミング
  \item[課題2] 文字列操作・・・（\textbf{サンプルのため，省略}）
  %本文の記述と矛盾しないように注意すること．
\end{description}

%--------------------------------------------------------------------%
\section{課題1：Linux環境におけるC言語プログラミング} \label{sec:topic1}
    \textbf{\small※執筆上の注意：少なくとも，(1) gccによるコンパイル方法，
    (2) コンパイルされたプログラムを実行する方法については記載すること．\\
    なお，本講義では，Red Hat Linux は使っていない．適切に書き直すこと．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

本講義では，Linux環境におけるC言語プログラミングをおこなう．
そこで，本章では・・・についてまとめる．

以降のプログラムは，いずれも Red Hat Linux 3.2.2-5 で動作を確認しているが，
一般的な UNIX で動作することを意図して作成している．
なお，以降の実行例における，行頭の \verb|$| 記号は，
Red Hat Linux 3.2.2-5におけるターミナルのプロンプトである．
% 注：以降の課題において，実行結果を得るために利用した，実行環境のOS，
%     ならびに，その環境におけるプロンプトを必ず書くこと．

C言語で書かれたソースコードは，\verb|gcc|でコンパイルすることで，
プログラムの実行ファイルを生成する．
例えば，\verb|program1.c|であれば，

% Verbatim environment
% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
%   - numbers           行番号を表示．none 非表示．left 左に表示．
%   - xleftmargin       枠の左の余白．行番号表示用に余白を与えたい．
%   - numbersep         行番号と枠の間隙 (gap)．デフォルトは 12 pt．
%   - fontsize          フォントサイズ指定
%   - baselinestretch   行間の大きさを比率で指定．デフォルトは 1.0．
\begin{Verbatim}[numbers=none, xleftmargin=10mm, numbersep=6pt,
  fontsize=\normalsize, baselinestretch=0.8]
$ gcc -Wall ・・・
\end{Verbatim}
%
のようにコンパイルする．
この時，生成されるプログラムの実行ファイルは・・・という名前になる．

% Tips: Verbatim の後に空行を入れると，段落が変わってしまう．
% 段落は変えたくないが，texソースでは隙間を空けて読みやすくしたいなら，
% 上記例のように，%のみの行を置くとよい．

ここで，\verb|-Wall|とは．．．するためのオプションであり，
\verb|-o|とは・・・を指定するオプションである．
これらのオプションをつけることで，・・・（略）

生成されたプログラムを実行するには，以下のようにターミナルで入力する．

\begin{Verbatim}[numbers=none, xleftmargin=10mm, numbersep=6pt,
  fontsize=\normalsize, baselinestretch=0.8]
$ program1
\end{Verbatim}

% 上記は，ダメな説明の例である．正しく動かすことができるよう，書き直すこと．
%
% ！もう一歩上へ！
% 何が問題か理解しているならば，その旨をレポートに書くこともできよう．
% 例えば，上記の実行例の後に，「ここで，ｘｘｘとしている点に注意が必要である．
% ｘｘｘとすると，ｘｘｘになってしまう．そのため，ｘｘｘが必要なのである．」
% といったことが書けると，レポートらしくなる．講義中に感じたちょっとした疑問は，
% レポートを書くために，重要な気づきを与えてくれる．ただし，その疑問が「ｘｘｘは
% 不思議だと思った．」で止まってしまうと，レポートではなく感想文になってしまう．
% 「感想」は，最後の感想の章以外に書いてはいけない．

%--------------------------------------------------------------------%
\section{課題2：文字列操作の基礎} \label{sec:topic2}
% Tips:
% - section, subsectionなどでは verbが使えない．必要ならば texttt を使うとよい．

%--------------------------------------------------------------------%
\subsection{プログラムの説明}
    \textbf{\small ※執筆上の注意：変数や数値は$\backslash$verbや\$\$
    で囲って，適切な書体で記述することを忘れずに．また，章・節番号や
    図表番号の引用も，数字を直接書くのではなく，\LaTeX{} の機能を使うこと．
    なお，このサンプルでは``わざと''一部の処理を省略している．
    見た目の違いを確認して，自分のレポートでは処理を忘れないようにしよう．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

% Tips:
% - 最初の段落で，この課題で作成したプログラムの全体像を説明する．
% - 次の段落で，プログラム内の関数や特に重要な変数等の名前や場所などを説明する．
% - 以降の段落で，各関数や変数等に関する詳細を説明する．

本課題で作成するプログラムは，・・・をするプログラムである．
プログラムリストは・・・節に添付している．

プログラムは全部で267行からなる．
まず，文字列操作関数として，
\verb|subst()|関数を11--25行目で宣言し， % この行は適切な書き方の例
split()関数を27-44行目で宣言している．   % この行は不適切な書き方の例
次に，これらの関数の動作を確認するため，・・・（省略）
最後に，・・・において，・・・（省略）

\verb|subst(STR, C1, C2)|関数は，
\verb|STR|が指す文字列中の，文字\verb|C1|を文字\verb|C2|に置き換える関数である．
プログラム中では，xxx関数の中で，入力文字列中の末尾に付く改行文字を
ヌル文字で置き換えるために使用している．

\verb|split(STR, ...)|関数は，・・・（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\subsection{動作確認の方法}
    \textbf{\small ※執筆上の注意：プログラムの使用法を説明する節である．
    入力データの準備，コマンドの実行方法，実行中のキーボード入力例，など
    を書く．ソースコードのファイルと，このレポートの記述通り実行すれば，
    報告者と同じ結果が再現できるように書いておく，という意識が必要である．
    なお，入力データの準備が不要なら無理に何かを準備する必要はない．この
    サンプルファイルでは，テンプレート文ではなく，架空の課題に対する記載
    例を示しているに過ぎない．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

本課題で作成したプログラムは，・・・をするプログラムであり，・・・が必要である．
そこで，まずは次の方法で・・・を準備する．

（※サンプルのため，いろいろと省略）

次に，以下の方法でプログラムを実行する．

（※サンプルのため，いろいろと省略）

実行結果として，次のような出力が得られる．

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\subsection{動作確認の結果}
    \textbf{\small ※執筆上の注意：動作確認の観点から結果を述べる．
    すなわち，前節で記述した実行方法（や入力データ）と実験結果から，
    課題プログラムの動作として妥当かどうかの言及をする．
    想定外の動作を発見したなら，そのことも書いておくとよい．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

前節における，入力1に対する結果1を見ると，・・・
（※サンプルのため，いろいろと省略）

入力3のように・・・では，結果3のような・・・となることがある．
そのため，・・・関数を利用する際にｘｘｘとならないように，注意する必要がある．

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\section{課題3：標準入力を受け付ける構文解析プログラムの作成}
\label{sec:topic3}

%--------------------------------------------------------------------%
\subsection{プログラムの説明}

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\subsection{動作確認の方法}

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\subsection{動作確認の結果}

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\section{感想}
% 感想を書かないならコメントアウトしておくこと．
% なお，感想に書かれた"感想と思われる内容"は，評価の対象外である．

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\section{作成したプログラムのソースコード}
    \textbf{\small ※執筆上の注意：余白にはみ出さないように注意．
    ソースコードは，1行あたり80文字以内に収めるのが無難．
    また，??章のような状態でレポートを提出しないように注意すること．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

%--------------------------------------------------------------------%
\subsection{課題2のソースコード} \label{sec:topic2-code}

課題2のために作成したプログラムを以下に添付する．
なお，\ref{sec:abstract}章に示した課題については，
\ref{xxxx}章で示したようにすべて正常に動作したことを付記しておく．

% Verbatim environment
% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
%   - numbers           行番号を表示．left なら左に表示．
%   - xleftmargin       枠の左の余白．行番号表示用に余白を与えたい．
%   - numbersep         行番号と枠の間隙 (gap)．デフォルトは 12 pt．
%   - fontsize          フォントサイズ指定
%   - baselinestretch   行間の大きさを比率で指定．デフォルトは 1.0．
\begin{Verbatim}[numbers=left, xleftmargin=10mm, numbersep=6pt,
  fontsize=\small, baselinestretch=0.8]
#include <stdio.h>

int main()
{
    char s[4] = {'A', 'B', 'C', '\0'};
    printf("s = %s\n", s);
    return 0;
}
// 以下は，はみ出し文字数を確認するためのダミーコメントです．
//00000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999
\end{Verbatim}

%--------------------------------------------------------------------%
\subsection{課題3のソースコード} \label{sec:topic3-code}

課題3のために作成したプログラムを以下に添付する．
なお，\ref{sec:abstract}章に示した課題については，
\ref{xxxx}章で示したようにすべて正常に動作したことを付記しておく．

% Verbatim environment
% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
%   - numbers           行番号を表示．left なら左に表示．
%   - xleftmargin       枠の左の余白．行番号表示用に余白を与えたい．
%   - numbersep         行番号と枠の間隙 (gap)．デフォルトは 12 pt．
%   - fontsize          フォントサイズ指定
%   - baselinestretch   行間の大きさを比率で指定．デフォルトは 1.0．
\begin{Verbatim}[numbers=left, xleftmargin=10mm, numbersep=6pt,
  fontsize=\small, baselinestretch=0.8]
#include <stdio.h>

int main()
{
    char s[4] = {'A', 'B', 'C', '\0'};
    printf("s = %s\n", s);
    return 0;
}
\end{Verbatim}

%--------------------------------------------------------------------%
%% 本文はここより上に書く（\begin{document}～\end{document}が本文である）
\end{document}
