lang:自制編程語言14——增加調試機制

前言

引入一個關鍵字,解釋到該關鍵字的時候就暫停終端,只有輸入了回車才能繼續,大概是這樣。


assert

除了卡出解釋完,還有從中間退出的,如果遇到斷言時輸入的是exit就直接退出解釋,如果輸入其他的,就往下繼續執行!

//Cmd.h
	//斷言語句控制器(終結符
	class AssertCmd : public Cmd {
	public:
		virtual SuatinCmdClassType GetClassType() { return SuatinCmdClassType_AssertCmd; }
		virtual void interpret();
	};
//Cmd.cpp
	void AssertCmd::interpret() {  //卡住解釋
		std::string s;
		do {
			std::cout << ">";
			s = "";
			std::cin >> s;
			if (s=="exit") {
				exit(0);
			}
		} while (s.length()==0);

	}
//Resolver.cpp
	//遇到assert關鍵字後,將停止語義樹的解釋,只有回車才能繼續  to be continue
	void Resolver::Deal_k_assert(int& _t) { //for debug
		++start;//assert關鍵字不屬於語句,是特殊的斷言
		
		if (uncompleted_tree == NULL) {//沒有待處理的語義樹-----------------
			semantic_tree->Push(new AssertCmd()); //將斷言加入語義樹
			return;
		}

		//有待處理的語義樹-----------------
		//檢查棧大小
		if (CheckStack_UnCompletedBlock())return;

		BlockCmd*  node_tmp = dynamic_cast<BlockCmd*>(v_UnCompletedBlock.top());//拿到最近的沒有結束的語句塊
		AssertCmd* node_new = new AssertCmd(); //創建新的斷言
		node_tmp->Push(node_new); //將斷言加入最近的未結束語句塊
	}

項目演示

//main.suatin
assert
sum = 0;
for(i=0;i<5;i=i+1)
	sum = sum +1;
	assert
end
初始化語言環境 time consumed 4 ms
詞法分析 time consumed 354 ms
普通語句>sum=0;
for括號內語句>i=0;
for括號內語句>i<5;
for括號內語句>i=i+1
普通語句>sum=sum+i;
語法分析·創建語法樹 time consumed 155 ms
>ass
[result]0
[result]0
[result]true
[result]0
>apple
[result]1
[result]true
[result]1
>jk
[result]2
[result]true
[result]3
>love
[result]3
[result]true
[result]6
>unity
[result]4
[result]true
[result]10
>assert
[result]5
[result]false
語法分析·解釋語法樹 time consumed 23377 ms
suatin environment>
                name   isconst    type      funcPtr     flag             num   str
                 NIL    true       nil     00000000    false               0
               FALSE    true      bool     00000000    false               0
                TRUE    true      bool     00000000     true               0
                   i   false    number     00000000     true               5
                 sum   false    number     00000000     true              10
顯示環境信息 time consumed 113 ms
釋放環境 time consumed 0 ms
program time consumed 24169 ms

項目代碼地址CSDN
https://download.csdn.net/download/weixin_41374099/12256625
項目代碼地址BDWP
鏈接:https://pan.baidu.com/s/1Lu0HyKYRM08R2kvnyKcMmA
提取碼:uen0
複製這段內容後打開百度網盤手機App,操作更方便哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章