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.
2.6 KiB
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
も同じディレクトリに保存してください。
これで必要な準備が終わりました!