【C/C++】 basic_stringクラス

ちょっと仕事でとある組み込み用プロセッサのアセンブラを作ってみようと思っとります。アセンブラに必要な機能として

プリプロセス(トリミング、マクロ展開)
パーシング
ラベル処理
ニモーニック→マシン語への変換

ってな位は必要になるわけです。ここで難しいのがパーシング(構文解析)で、C言語のような高級言語のコンパイラだったらyaccとかbisonとかパーサ出力してくれるコンパイラコンパイラで処理するのだけど、アセンブラ位でそこまでするのも何だかなぁ。しかも今回対象としているアセンブラはマイクロコード用のアセンブラで文法が特殊な構造してるから、ちょいっと独自に作ってみるかと思うわけです。

で、そうなるとどうやって作るかという事ですが、アセンブラは文字列処理を行うわけやし、ラベルの処理とかもあってデータ数が可変になる。あとPCで動作させるという事であればメモリや処理速度には余裕がありそうやね。文字列処理には向いていないけど、C++を使う事にするとSTLを使わない理由はない。Boost C++も使いたいけど標準でない事と環境のセットアップが面倒[E:coldsweats01]なんで、C++/STLで実装する事にしました。

そこで使う事になるテンプレートクラスは

string (厳密にはSTLではないけど)
vector (テキストファイルのバッファリング)
map (ラベル処理)

ってな感じかな。マシン語への変換はデザインパターンから Chain of Responsibility パターンを使うと楽そうですな。

話が大分脱線したけど、今回は復習ついでにstringクラスのメンバと使い方を調べてみようかと。
前にSTL使ったのって、もうかれこれ数年前です〜っかり忘れてるんだなぁ。この所組み込みばっかりやったし…[E:coldsweats01]

basic_stringクラスの主要メンバ関数

append   文字列の追加
assign     文字列の代入
insert      文字列の挿入
replace   文字列の置換
substr     文字列の一部抽出
at           特定文字への参照ポインタ
begin      文字列の先頭iterator取得
end        文字列の末尾+1 iterator取得
compare 文字列の比較
copy      文字列のコピー
empty    文字列の空チェック
erase     文字列の削除
find        指定文字列の検索
length     文字列の長さ

とりあえずstringクラスだけ。

Author: kan
初めてプログラムらしきものを作ったのは幼稚園の時。それから約40年経ち、現在はデジタル回路設計から信号処理、機械学習まで幅広い経験を活かしてシステムアーキテクトとして活動中。超並列処理、デジタル回路とソフトウェアのバランス設計が得意分野。 Linux/Mac/Windows使い。 C/C++を主要言語として、Unity、Qtなどのフレームワーク興味あり。UI/UXデザイン、STL拡張など。 音声処理、画像処理、技術コンサルは仕事でも請け負います。 一般ソフトウェア開発プロセス、医療機器ソフトウェア開発プロセス作成も進行中。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください