You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
cpp-peglib/tutorial/chap_01.md

2.6 KiB

はろーわーるど!

まずはRubyでお馴染みのirbのようなREPL(Read-Eval-Print-Loop)環境を実現します。以下のソースコードをrepl.ccに保存します。

#include <iostream>
#include "linenoise.hpp"

using namespace std;

int main(void)
{
	while (true) {
	    // 一行入力
	    auto line = linenoise::Readline("> ");

		// 空行ならスキップ
	    if (line.empty()) {
	        break;
	    }

		// 入力テキストをそのまま出力
	    cout <<  "echo: '" << line << "'" << endl;

	    // 履歴に追加
	    linenoise::AddHistory(line.c_str());
	}
	return 0;
}

次にlinenoise.hppここからダウンロードして,repl.ccと同じディレクトリに保存します。私はこんな感じでwgetを使いました。

wget https://raw.githubusercontent.com/yhirose/cpp-linenoise/master/linenoise.hpp

続いてコンパイルです。わたしはclang++のパージョン3.5を使っています。

clang++ -std='c++11' -o repl repl.cc

g++ 5.1では,

g++ -std='c+11 -o repl repl.cc'

Visual C++ 14 (Visual Studio 2015) では,

cl -DUNICODE /EHsc repl.cc User32.lib

とするとうまくいきました。

では生成された実行ファイルreplを実行してみましょう。

./repl

REPLのプロンプト>が表示されるので,何か入力してリターンキーを押してみましょう。

> はろーわーるど!
echo: 'はろーわーるど!'
> _

プログラミング入門の定番「はろーわーるど!」が表示されました!

実は入力したテキストは,履歴リストに追加されています。Ctrl+Pキーを押してみてください。

> はろーわーるど!_

このようにlinenoiseライブラリを使うと,以前に入力したテキストを呼び出すことができます。長い文字列を再度入力しなければならない時などはとても便利です。(linenoiseに関する情報はGithubのプロジェクトページをご覧ください。)

Ctrl+Cを押すとREPLから抜けることができます。

まだPEGについて何も出てきませんね...とりあえずPEGライブラリをここからダウンロードして,後の章のために準備しておきましょう。このファイルpeglib.hも同じディレクトリに保存してください。

これで必要な準備が終わりました!