[Suatin]コンパイルの原則を学習せずに言語14を作成-デバッグメカニズムを追加

序文

キーワードを導入し、キーワードが説明されたら端末を一時停止し、キャリッジリターンを入力したときにのみ続行します。これはおそらくそうです。


主張する

説明の外のカードに加えて、途中からの出口もあります。アサーションが発生したときに入力が出口の場合、説明は直接終了します。他のカードを入力した場合は、実行を続けてください。

//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

プロジェクトコードアドレスCSDNhttps
//download.csdn.net/download/weixin_41374099/12256625
プロジェクトコードアドレスBDWP
リンク:https
://pan.baidu.com/s/1Lu0HyKYRM08R2kvnyKcMmA抽出コード:uen0
このコンテンツをコピーしてBaidu.comを開きますディスクモバイルアプリ、操作がより便利

おすすめ

転載: blog.csdn.net/weixin_41374099/article/details/104964840