This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Fork of libMiMic by Ryo Iizuka

core/mimicvm/NyLPC_cMiMicTxtCompiler.h

Committer:
furutani
Date:
2017-02-24
Revision:
115:fa79286d8ea4
Parent:
2:b96c1e90d120

File content as of revision 115:fa79286d8ea4:

/*********************************************************************************
 * PROJECT: MiMic
 * --------------------------------------------------------------------------------
 *
 * This file is part of MiMic
 * Copyright (C)2011 Ryo Iizuka
 *
 * MiMic is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * For further information please contact.
 *  http://nyatla.jp/
 *  <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
 *
 *********************************************************************************/
#ifndef NYLPC_CMIMICTXTCOMPILER_H_
#define NYLPC_CMIMICTXTCOMPILER_H_
#include "NyLPC_cMiMicVM.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


/**
 * クラス型を定義します。
 * NyLPC_cMiMicTxtCompilerクラスは、MiMicBCのTXTパートを、MiMicVMのインストラクション配列に変換します。
 * MiMicBCは任意区切りのフラグメントテキストで入力できます。
 */
typedef struct NyLPC_TcMiMicTxtCompiler NyLPC_TcMiMicTxtCompiler_t;


typedef NyLPC_TUInt8 NyLPC_TcMiMicTxtCompiler_ST;
#define NyLPC_TcMiMicTxtCompiler_ST_OPC  0x01   //OPをパース中
#define NyLPC_TcMiMicTxtCompiler_ST_OPR  0x02   //オペランドを解析中
#define NyLPC_TcMiMicTxtCompiler_ST_CTR  0x03   //制御パラメータを解析中
#define NyLPC_TcMiMicTxtCompiler_ST_OK   0x04   //パースを完了した。
#define NyLPC_TcMiMicTxtCompiler_ST_NG   0xff   //パースでエラーが発生ウェーイ


struct NyLPC_TcMiMicTxtCompiler{
    NyLPC_TUInt8* out_buf;
    NyLPC_TUInt8 st;//ステータス
    NyLPC_TcMiMicVM_OP_TYPE _current_opc;       //解析中のオペコード
    NyLPC_TUInt8            _current_oprtype;   //解析中のオペランドタイプ
    NyLPC_TUInt8 _inst_len;                     //解析中のインストラクションセットの長さ
    NyLPC_TUInt8 _oprbc_len;                    //オペコード解析の一時変数
    NyLPC_TUInt8 tmp_len;//tmpに格納したデータの数を数えたり。
    NyLPC_TChar  tmp[24];
};

typedef NyLPC_TUInt8 NyLPC_TcMiMicTxtCompiler_RET;
#define NyLPC_TcMiMicTxtCompiler_RET_OK 0x00
#define NyLPC_TcMiMicTxtCompiler_RET_OK_END 0x01        //命令のパースに成功し、かつEND命令を検出。
#define NyLPC_TcMiMicTxtCompiler_RET_CONTINUE   0x02    //続きのBCを要求している。
#define NyLPC_TcMiMicTxtCompiler_RET_NG         0x80



void NyLPC_cMiMicTxtCompiler_initialize(NyLPC_TcMiMicTxtCompiler_t* i_inst);
#define NyLPC_cMiMicTxtCompiler_finalize(i)
NyLPC_TcMiMicTxtCompiler_RET NyLPC_cMiMicTxtCompiler_compileFragment(NyLPC_TcMiMicTxtCompiler_t* i_inst,const struct NyLPC_TCharArrayPtr* i_bc,struct NyLPC_TUInt32ArrayPtr* i_bin,NyLPC_TUInt16* o_bin_len,NyLPC_TUInt16* o_parsed_bc);
NyLPC_TcMiMicTxtCompiler_RET NyLPC_cMiMicTxtCompiler_compileFragment2(NyLPC_TcMiMicTxtCompiler_t* i_inst,NyLPC_TChar i_bc,struct NyLPC_TUInt32ArrayPtr* i_bin,NyLPC_TUInt16* o_bin_len);


#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* NYLPC_CMIMICTXTCOMPILER_H_ */