【原创】【中秋直播】自制编程语言 第二章(内附大量干货)

目前我们的程序还有点问题。
例如,代码是:write "hello world"
这样,只使用cin语句读入字符串t,只会读取前半部分"hello ,无法读取后面的world"
因此我们必须使用getline来读入。一般,getline函数的格式是:

getline(cin,s);

表示从cin读入一整行字符串s,直到换行符结束。

修改后的代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	for(;;){
		cin>>s;
		if(s=="write"){
			string t;
			getline(cin,t);//待输出的字符串
			for(int i=2;i<t.size()-1;i++)cout<<t[i];//i=2是为了跳过空格
			cout<<endl;
		}
		else if(s=="exit")return 0;
		else{
			cout<<"Error in program.Compilation aborted.";return 0;//编译错误
		}
	}
}

来点干货。我们感觉从stdin输入代码还不过瘾,需要使用系统命令行编译。下面是来自我老博客的内容。

一开始,不要想的太难,从最简单的开始,一点一点添加功能,到最后,你就会发现,结果就很像是一个完整的编程语言了。
首先,我们先抛开一切问题,先说说如何对这个编程语言进行编译或是解释。用编译型的语言实在是太麻烦了(因为要生成一个exe),所以就先按照解释型的语言来吧。
想要编译的话,肯定是用操作系统的命令行编译。输入类似于这样的指令。
提示符>编译器名 要编译的文件名
如何让程序读取这个要编译的文件名?首先,我们知道,在操作系统执行命令时,会运行整个指令中第一个程序名,然后,把后面的所有的参数通过参数的形式,传递到main函数里。
肯定又有人要问了,main函数不是int main(void)吗,哪里来的参数。但是,int main还有另外一种写法,int main(int argc,char** argv),其中,argc是参数的数量,argv是每一个参数。
这样,我们通过读取argv[1](argv[0]存放编译器的名字),就可以读取文件了。可以用类似的语句。freopen(argv[1],"r",stdin);

gcc编译经常会有什么“gcc a.cpp a.exe -wall -quiet -fpermissive”之类的指令。这种写法,系统会默认运行gcc程序,并把后面的那些什么cpp等,叫做命令行参数。通过传递命令行参数,来指定文件名。
通过argv,就可以读取那些命令行参数了。

因此可以把代码写成这样:

int main(int argc,char** argv){
if(argc!=2){//有一个要解释的文件参数
cout<<"Cannot find source file.\n";
return 0;
}
freopen(argv[1],"r",stdin);
for( ;; ){
...

完。

posted @ 2021-09-18 18:54  计算机知识杂谈  阅读(62)  评论(0编辑  收藏  举报