TNB Library
TnbTmlResult.h
[詳解]
1#pragma once
13#include "TnbStr.h"
14#include "TnbStaticMap.h"
15#include "TnbGrammarAnalyzer.h"
16
17
18
19//TNB Library
20namespace TNB
21{
22
23
24
35
36
37
47class CTml
48{
49public:
50
52 enum EScene
53 {
68 };
69
72 {
77 // Operation_Text_EscInsert, ///< 文字列 ¥i() 処理中
83 };
84
87 {
114 };
115};
116
117
118
132class CTmlResult : public CTml
133{
134public:
135
140 CTmlResult(void) : m_eResult(Result_Success), m_eScene(Scene_Non), m_eOperation(Operation_Non), m_iFileLine(0)
141 {
142 }
143
148 CTmlResult(const CTmlResult& other)
149 : m_eResult(other.m_eResult), m_eScene(other.m_eScene), m_eOperation(other.m_eOperation), m_iFileLine(other.m_iFileLine)
150 , m_strFuncName(other.m_strFuncName), m_strToken(other.m_strToken), m_strFileName(other.m_strFileName)
151 {
152 }
153
160 CTmlResult(EOperation eOperation, EResult eResult)
161 : m_eResult(eResult), m_eScene(Scene_Non), m_eOperation(eOperation), m_iFileLine(0)
162 {
163 }
164
172 CTmlResult(EScene eScene, EOperation eOperation, EResult eResult)
173 : m_eResult(eResult), m_eScene(eScene), m_eOperation(eOperation), m_iFileLine(0)
174 {
175 }
176
183 CTmlResult(EResult i) : m_eResult(i), m_eScene(Scene_Non), m_eOperation(Operation_Non), m_iFileLine(0)
184 {
185 }
186
193 {
194 m_eResult = other.m_eResult;
195 m_eScene = other.m_eScene;
196 m_eOperation = other.m_eOperation;
197 m_iFileLine = other.m_iFileLine;
198 m_strFuncName = other.m_strFuncName;
199 m_strToken = other.m_strToken;
200 m_strFileName = other.m_strFileName;
201 return *this;
202 }
203
213 {
214 *this = CTmlResult();
215 m_eResult = i;
216 return *this;
217 }
218
223 void SetNop(void)
224 {
225 *this = CTmlResult();
226 m_eResult = Result_Nop;
227 }
228
233 void SetSuccess(void)
234 {
235 *this = CTmlResult();
236 m_eResult = Result_Success;
237 }
238
244 bool IsSuccess(void) const
245 {
246 return m_eResult == Result_Success;
247 }
248
254 bool IsError(void) const
255 {
256 return m_eResult < 0;
257 }
258
264 bool IsNop(void) const
265 {
266 return m_eResult == Result_Nop;
267 }
268
273 void SetScene(EScene eScene)
274 {
275 m_eScene = eScene;
276 }
277
282 void SetOperation(EOperation eOperation)
283 {
284 m_eOperation = eOperation;
285 }
286
291 void SetFuncName(LPCSTR lpszFunc)
292 {
293 m_strFuncName = lpszFunc;
294 }
295
300 void SetErrorString(LPCSTR lpszString)
301 {
302 m_strToken = lpszString;
303 }
304
311 CTmlResult& SetLine(LPCSTR lpszFileName, INT_PTR iFileLine)
312 {
313 m_iFileLine = iFileLine;
314 m_strFileName = lpszFileName;
315 return *this;
316 }
317
324 {
325 m_iFileLine = gram.GetLine();
326 m_strFileName = gram.GetName();
327 return *this;
328 }
329
334 EResult GetResult(void) const
335 {
336 return m_eResult;
337 }
338
343 EScene GetScene(void) const
344 {
345 return m_eScene;
346 }
347
353 {
354 return m_eOperation;
355 }
356
361 LPCSTR GetFuncName(void) const
362 {
363 return m_strFuncName;
364 }
365
370 LPCSTR GetErrorString(void) const
371 {
372 return m_strToken;
373 }
374
379 INT_PTR GetFileLine(void) const
380 {
381 return m_iFileLine;
382 }
383
388 LPCSTR GetFileName(void) const
389 {
390 return m_strFileName;
391 }
392
402 {
403 if ( ! IsError() )
404 {
405 return "";
406 }
407 //
408 CAscii strFile;
409 if ( ! m_strFileName.IsEmpty() )
410 {
411 strFile.Format("%s(%d):", m_strFileName, m_iFileLine);
412 }
413 //
414 CAscii strFunc = GetFuncName();
415 if ( ! strFunc.IsEmpty() )
416 {
417 strFunc = strFunc.Sandwich(" FuncName=[", "]");
418 }
419 //
420 CAscii strScene = SceneToString(m_eScene);
421 if ( ! strScene.IsEmpty() )
422 {
423 strScene = strScene.Sandwich(" Scene=[", "]");
424 }
425 //
426 CAscii strOperation = OperationToString(m_eOperation);
427 if ( ! strOperation.IsEmpty() )
428 {
429 strOperation = strOperation.Sandwich(" Operation=[", "]");
430 }
431 //
432 CAscii strResult = ResultToString(m_eResult);
433 if ( ! strResult.IsEmpty() )
434 {
435 strResult = strResult.Sandwich(" Result=[", "]");
436 }
437 //
438 CAscii strError = GetErrorString();
439 if ( ! strError.IsEmpty() )
440 {
441 strError = strError.Sandwich(" / [", "]");
442 }
443 //
444 return strFile + strFunc + strScene + strOperation + strResult + strError;
445 }
446
453 static CTmlResult CheckParamNum(INT_PTR iParamNum, INT_PTR iExpectNum)
454 {
455 CTmlResult r;
456 if ( iExpectNum == 0 && iParamNum > 0 )
457 {
458 //引数は不必要です。
460 }
461 else if ( iParamNum < iExpectNum )
462 {
463 //引数が足りません。
465 }
466 else if ( iParamNum > iExpectNum )
467 {
468 //引数が多すぎます。
470 }
471 return r;
472 }
473
479 static LPCSTR SceneToString(EScene eScene)
480 {
481 const static CStaticMapT<EScene, LPCSTR> t[] =
482 {
483 Scene_Non, "",
484 Scene_Val, "val文処理中",
485 Scene_Array, "array文処理中",
486 Scene_Func, "func文処理中",
487 Scene_If, "if文処理中",
488 Scene_Else, "else文処理中",
489 Scene_Switch, "switch文処理中",
490 Scene_Case, "case文処理中",
491 Scene_Default, "default文処理中",
492 Scene_While, "while文処理中",
493 Scene_Break, "break文処理中",
494 Scene_Return, "return文処理中",
495 Scene_Include, "include文処理中",
496 Scene_End, "end文処理中",
497 };
498 return CStaticMapT<EScene, LPCSTR>::Find(eScene, t);
499 }
500
506 static LPCSTR OperationToString(EOperation eOperation)
507 {
508 const static CStaticMapT<EOperation, LPCSTR> t[] =
509 {
510 Operation_Non, "",
511 Operation_Text, "文字列処理中",
512 Operation_Text_Esc, "文字列 \\? 処理中",
513 Operation_Text_EscHex, "文字列 \\x 処理中",
514// Operation_Text_EscInsert, "文字列 \\i() 処理中",
515 Operation_Calc, "計算処理中",
516 Operation_CheckFunc, "関数チェック中",
517 Operation_CheckStatement, "ステートメントチェック中",
518 Operation_FindingFunc, "関数検索中",
519 Operation_FileAccess, "Fileアクセス中",
520 };
521 return CStaticMapT<EOperation, LPCSTR>::Find(eOperation, t);
522 }
523
529 static LPCSTR ResultToString(INT_PTR result)
530 {
531 const static CStaticMapT<INT_PTR, LPCSTR> t[] =
532 {
533 Result_Success, "",
534 Result_UnknownError, "その他のエラー",
535 Result_InvalidEscSeq, "エスケープシーケンスが異常",
536 Result_InvalidHexNotation, "HEX表記が異常",
537 Result_NotFoundParentheses, "括弧が必要なところにない",
538 Result_NotCloseParentheses, "括弧が閉じていない",
539 Result_InvalidParenthesesPosition, "括弧の位置がおかしい",
540 Result_UnfinishedExpression, "計算式が途中で終わっている",
541 Result_ZeroDivide, "0で割ろうとしてます",
542 Result_UnknownKeyword, "知らないキーワード",
543 Result_InvalidWordPosition, "単語位置が異常です(そこには存在しないはず)",
544 Result_NotName, "名前がありません",
545 Result_AlreadyExistName, "既にある名前です",
546 Result_UnnecessaryParam, "引数は不必要です",
547 Result_ManyParam, "引数が多すぎます",
548 Result_NotenoughParam, "引数が足りません",
549 Result_OutOfRange, "範囲外です",
550 Result_InvalidMacroContentsLevel, "マクロコンテンツレベルが異常",
551 Result_OpenFailure, "Open失敗",
552 Result_ReadFailure, "Read失敗",
553 Result_SendFailure, "Send失敗",
554 Result_InvalidState, "状態エラー(今、実行できません)",
555 Result_NotFoundFunction, "必要な関数がありません",
556 Result_UserInterruption, "中断",
558 };
559 return CStaticMapT<INT_PTR, LPCSTR>::Find(result, t);
560 }
561
562private:
563 EResult m_eResult;
564 EScene m_eScene;
565 EOperation m_eOperation;
566 CAscii m_strFuncName;
567 CAscii m_strToken;
568 CAscii m_strFileName;
569 INT_PTR m_iFileLine;
570};
571
572
573
574}; // TNB
文法解析関係のヘッダ
静的簡易マップ管理関係のヘッダ
文字列管理関係のヘッダ
文法解析テンプレート
UINT_PTR GetLine(void) const
[取得] 行番号取得
CStr GetName(void) const
[取得] 名前取得
静的簡易マップクラス.
Definition: TnbStaticMap.h:52
static VAL Find(const TYP &key, const TYPS &ts, const VAL &def=VAL())
[検索] 値検索
Definition: TnbStaticMap.h:90
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbStr.h:528
CStrT Sandwich(const TYP *lpszBefore, const TYP *lpszAfter) const
[作成] 前後連結.
Definition: TnbStr.h:827
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
Definition: TnbStr.h:359
TinyMacroLang 結果状態管理
Definition: TnbTmlResult.h:133
bool IsNop(void) const
[確認] NOP 確認.
Definition: TnbTmlResult.h:264
void SetErrorString(LPCSTR lpszString)
[設定] エラー内容設定
Definition: TnbTmlResult.h:300
LPCSTR GetFuncName(void) const
[取得] エラー発生関数名取得
Definition: TnbTmlResult.h:361
CTmlResult(const CTmlResult &other)
コピーコンストラクタ
Definition: TnbTmlResult.h:148
static CTmlResult CheckParamNum(INT_PTR iParamNum, INT_PTR iExpectNum)
[確認] パラメータの数と、期待の数のチェック.
Definition: TnbTmlResult.h:453
LPCSTR GetErrorString(void) const
[取得] エラー内容取得
Definition: TnbTmlResult.h:370
static LPCSTR SceneToString(EScene eScene)
[変換] シーンコード→文字列
Definition: TnbTmlResult.h:479
LPCSTR GetFileName(void) const
[取得] エラーソースファイル名取得
Definition: TnbTmlResult.h:388
CTmlResult(EResult i)
代入コンストラクタ.
Definition: TnbTmlResult.h:183
void SetFuncName(LPCSTR lpszFunc)
[設定] エラー発生関数名設定
Definition: TnbTmlResult.h:291
EResult GetResult(void) const
[取得] リザルトコード取得.
Definition: TnbTmlResult.h:334
CTmlResult(EScene eScene, EOperation eOperation, EResult eResult)
代入コンストラクタ.
Definition: TnbTmlResult.h:172
CAscii ToString(void)
[取得] 文字列取得.
Definition: TnbTmlResult.h:401
CTmlResult & operator=(EResult i)
[代入] int型値代入.
Definition: TnbTmlResult.h:212
void SetSuccess(void)
[設定] SUCCESS設定.
Definition: TnbTmlResult.h:233
CTmlResult(void)
コンストラクタ.
Definition: TnbTmlResult.h:140
EScene GetScene(void) const
[取得] シーンコード取得
Definition: TnbTmlResult.h:343
CTmlResult & operator=(const CTmlResult &other)
コピーオペレータ
Definition: TnbTmlResult.h:192
CTmlResult(EOperation eOperation, EResult eResult)
代入コンストラクタ.
Definition: TnbTmlResult.h:160
CTmlResult & SetLine(const CTmlGrammar &gram)
[設定] エラーソースファイル名、行数設定
Definition: TnbTmlResult.h:323
void SetScene(EScene eScene)
[設定] シーンコード設定
Definition: TnbTmlResult.h:273
bool IsError(void) const
[確認] ERROR 確認.
Definition: TnbTmlResult.h:254
static LPCSTR ResultToString(INT_PTR result)
[変換] リザルトコード→文字列
Definition: TnbTmlResult.h:529
static LPCSTR OperationToString(EOperation eOperation)
[変換] オペレーションコード→文字列
Definition: TnbTmlResult.h:506
void SetNop(void)
[設定] NOP設定.
Definition: TnbTmlResult.h:223
bool IsSuccess(void) const
[確認] SUCCESS 確認.
Definition: TnbTmlResult.h:244
void SetOperation(EOperation eOperation)
[設定] オペレーションコード設定
Definition: TnbTmlResult.h:282
INT_PTR GetFileLine(void) const
「取得」 エラーソース行番号取得
Definition: TnbTmlResult.h:379
CTmlResult & SetLine(LPCSTR lpszFileName, INT_PTR iFileLine)
[設定] エラーソースファイル名、行数設定
Definition: TnbTmlResult.h:311
EOperation GetOperation(void) const
[取得] オペレーションコード取得
Definition: TnbTmlResult.h:352
TinyMacroLang コード管理
Definition: TnbTmlResult.h:48
EOperation
オペレーションコード
Definition: TnbTmlResult.h:72
@ Operation_FindingFunc
関数検索中
Definition: TnbTmlResult.h:81
@ Operation_FileAccess
Fileアクセス中
Definition: TnbTmlResult.h:82
@ Operation_CheckFunc
関数チェック中
Definition: TnbTmlResult.h:79
@ Operation_CheckStatement
ステートメントチェック中
Definition: TnbTmlResult.h:80
@ Operation_Text_EscHex
文字列 ¥x 処理中
Definition: TnbTmlResult.h:76
@ Operation_Text_Esc
文字列 ¥? 処理中
Definition: TnbTmlResult.h:75
@ Operation_Calc
計算処理中
Definition: TnbTmlResult.h:78
@ Operation_Non
未定義
Definition: TnbTmlResult.h:73
@ Operation_Text
文字列処理中
Definition: TnbTmlResult.h:74
EScene
シーンコード
Definition: TnbTmlResult.h:53
@ Scene_Array
array文処理中
Definition: TnbTmlResult.h:56
@ Scene_Break
break文処理中
Definition: TnbTmlResult.h:64
@ Scene_Else
else文処理中
Definition: TnbTmlResult.h:59
@ Scene_Case
case文処理中
Definition: TnbTmlResult.h:61
@ Scene_Non
未定義
Definition: TnbTmlResult.h:54
@ Scene_Include
include文処理中
Definition: TnbTmlResult.h:66
@ Scene_Switch
switch文処理中
Definition: TnbTmlResult.h:60
@ Scene_If
if文処理中
Definition: TnbTmlResult.h:58
@ Scene_Return
return文処理中
Definition: TnbTmlResult.h:65
@ Scene_While
while文処理中
Definition: TnbTmlResult.h:63
@ Scene_Func
func文処理中
Definition: TnbTmlResult.h:57
@ Scene_End
end文処理中
Definition: TnbTmlResult.h:67
@ Scene_Val
val文処理中
Definition: TnbTmlResult.h:55
@ Scene_Default
default文処理中
Definition: TnbTmlResult.h:62
EResult
リザルトコード
Definition: TnbTmlResult.h:87
@ Result_InvalidHexNotation
HEX表記が異常
Definition: TnbTmlResult.h:92
@ Result_Nop
処理なし
Definition: TnbTmlResult.h:89
@ Result_ReadFailure
Read失敗
Definition: TnbTmlResult.h:108
@ Result_UnknownError
その他のエラー
Definition: TnbTmlResult.h:90
@ Result_InvalidEscSeq
エスケープシーケンスが異常
Definition: TnbTmlResult.h:91
@ Result_ManyParam
引数が多すぎます
Definition: TnbTmlResult.h:103
@ Result_InvalidMacroContentsLevel
マクロコンテンツレベルが異常です
Definition: TnbTmlResult.h:106
@ Result_OpenFailure
Open失敗
Definition: TnbTmlResult.h:107
@ Result_UnnecessaryParam
引数は不必要です
Definition: TnbTmlResult.h:102
@ Result_UserInterruption
ユーザによる中断
Definition: TnbTmlResult.h:112
@ Result_AlreadyExistName
既にある名前です
Definition: TnbTmlResult.h:101
@ Result_Success
成功
Definition: TnbTmlResult.h:88
@ Result_UnfinishedExpression
計算式が途中で終わっている
Definition: TnbTmlResult.h:96
@ Result_NotName
名前がありません
Definition: TnbTmlResult.h:100
@ Result_InvalidState
状態エラー(今、実行できません)
Definition: TnbTmlResult.h:110
@ Result_ZeroDivide
0で割ろうとしてます
Definition: TnbTmlResult.h:97
@ Result_InvalidWordPosition
単語位置が異常です(そこには存在しないはず)
Definition: TnbTmlResult.h:99
@ Result_SendFailure
Send失敗
Definition: TnbTmlResult.h:109
@ Result_InvalidParenthesesPosition
括弧の位置がおかしい
Definition: TnbTmlResult.h:95
@ Result_NotenoughParam
引数が足りません
Definition: TnbTmlResult.h:104
@ Result_NotFoundParentheses
括弧が必要なところにない
Definition: TnbTmlResult.h:93
@ Result_NotFoundFunction
必要な関数がありません
Definition: TnbTmlResult.h:111
@ Result_ProgramableInterruption
プログラムによる中断
Definition: TnbTmlResult.h:113
@ Result_NotCloseParentheses
括弧が閉じていない
Definition: TnbTmlResult.h:94
@ Result_OutOfRange
範囲外
Definition: TnbTmlResult.h:105
@ Result_UnknownKeyword
知らないキーワード
Definition: TnbTmlResult.h:98
CGrammarAnalyzerT< char > CTmlGrammar
TinyMacroLang 文章解析
Definition: TnbTmlResult.h:34
TNB Library
Definition: TnbDoxyTitle.txt:2