IParser

パーサーの基底クラス

パーサーオブジェクトに1バイトずつ電文を投入することで、電文系列を解釈する状態遷移マシンです。

メソッド

Parse(), operator << ()

IParser& Parse(uint8_t u8b)
IParser& operator << (char_t c)

パーサーに1バイト入力します。入力のたびにパーサーの状態が変化し、パーサーの解釈が完了するとstate()E_TWESERCMD_COMPLETEに変化し解釈完了状態となります。

state()

uint8_t state()

パーサーの状態を取得します。

operator bool(), is_complete()

operator bool()
bool is_complete()

パーサーの状態がE_TWESERCMD_COMPLETEの場合trueになります。

length()

uint16_t length()

パーサーで解釈済みのバイト列のデータ長を返します。

operator[]()

uint8_t operator[](int i)

パーサーの解釈済みのバイト列にアクセスします。

get_payload()

SmplBuf_Byte& get_payload()

パーサーの解釈済みのバイト列を格納した配列クラスSmplBuf_Byteを参照します。

reinit()

virtual void reinit()

パーサーの解釈途中の内容を破棄し、新たな解釈を始めます。

operator << ()

IStreamOut& operator << (TWE::IStreamOut& lhs, IParser& rhs)
IStreamOut& operator << (TWETERM::ITerm& lhs, IParser& rhs)

IStreamOutをベースクラスにもつストリームオブジェクトに、書式出力します。

メソッド

_u8Parse()

virtual uint8_t _u8Parse(char_t u8b) = 0

1バイト入力して解釈を進める仮想関数です。派生クラスにより実装されます。

_vOutput()

virtual inline void _vOutput(SmplBuf_Byte& bobj, IStreamOut& p) = 0

バイト配列bobjに格納されるバイト列に対応する書式をストリームpに出力する仮想関数です。派生クラスにより実装されます。

状態

状態名

状態

E_TWESERCMD_EMPTY

0

解釈前で、まだ系列のヘッダも認識できていない

1..0x7F

解釈中

E_TWESERCMD_COMPLETE

0x80

系列が正しく解釈できた

E_TWESERCMD_ERROR

0x81

系列の解釈にエラーがあった

E_TWESERCMD_CHECKSUM_ERROR

0x82

系列は得られたがチェックサムエラーだった

最終更新