导航:首页 > 源码编译 > 行编译器项目总结

行编译器项目总结

发布时间:2022-05-22 10:13:35

❶ 总结Linux下的4种常用的编译开发工具——编辑器、编译器、调试器及项目管理器的功能。

编辑器:vi,getedit等,写代码用的。
编译器:gcc/g++,把代码编译成二进制程序
调试器:gdb,kgdb等,调试程序用的
项目管理器:一般用eclipse等IDE来管理工程

❷ 求简单行编译器

C++ 实现的,用的一个Editor类.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Editor
{
public:
Editor(){} //缺省构造函数
Editor(const string s):line(s){} //带参数构造函数
void ReadFile(const char * filename); //如果从文件读取
int Find(const string & f) const; //查找
int Replace(const string & from,const string & to); //替换
int ReplaceAll(const string & from,const string & to); //替换所有
int Edit(); //编辑
void display() const //输出
{
cout<<line<<endl;
}
private:
string line;
};

void Editor::ReadFile(const char * filename)
{
fstream infile(filename,ios::in);
if(! infile)
{
cerr<<"初始化失败!"<<endl;
exit(0);
}
getline(infile,line);
}

int Editor::Find(const string & f) const
{
return line.find(f,0);
}

int Editor::Replace(const string & from,const string & to)
{
if(Find(from)==string::npos)
return 0;
line.replace(Find(from),from.size(),to);
return 1;
}

int Editor::ReplaceAll(const string & from,const string & to)
{
while(Find(from)!=string::npos)
Replace(from,to);
return 1;
}

int Editor::Edit()
{
cout<<"input the new line:"<<endl;
getline(cin,line);
return 1;
}

int main()
{
Editor e("how are you today! you are right!");
e.display();
e.ReplaceAll("you","we");
e.display();
return 0;
}

命令行编译器

yun

❹ 开发一个 C++ 编译器的难度有多大,难点又在哪里

C++的前端是出了名的复杂度和可靠性要求并驾齐驱的软件。

(这两点都比它高一个数量级的大概就只有OS了)

对于这种系统,唯一的办法就是烧钱。

烧钱的作用主要包括:
1.留人;
2.填坑;
3.买买买。

先说留人:复杂度一般是“细节”的代名词。现实中的编译器大多数以递归下降为主,自底向上的归纳推导为辅。这两样在教科书上也就是几页纸的事情。但是现实总是很残酷的,人们总想让语言更加“易用”,这就意味着各种上下文相关的情况都会出现。

对于C++来说,你要判断一个符号是类型或者变量(比如这个符号被用在模板参数中),要看前面的声明/定义。这就是一个上下文相关的推导。然后你就会写大量的if else switch case之类的代码来解决各种各样的可能分支。写它的人当然知道它是做什么的,但是如果这个人离职了,新来一个人,就呆掉了,这写的都是什么煞笔玩意儿。因为它不知道现实中怎样的需求会导致奇形怪状的逻辑。所以人员的稳定,对于这种长周期迭代、逻辑复杂的项目是很重要的。但是人的水平要求高吗?不算高也不算低。总结来说就是:有逻辑,知好歹。技术什么都可以培养,但是态度和基本智商是比较难培养起来的。

至于怎么保证人员稳定?很简单:加薪。

再说填坑:编译器是对正确性要求很高的基础软件。这里的正确性既包括产生的代码的正确性,也包括编译器自身对于各种问题的容忍度和足够丰富的错误提示。容错和错误提示本身也是代码,也有很大的出错几率。所以这些软件,bug少不了。但是作为基础软件,你又不能随便就2+3搞成了2*3,这样还怎么让别人相信爱情。所以要烧很多钱来养一帮debugger。

再说买买买:古人日:我们不用很麻烦很辛苦也可以成佛。既然这么费神我们自己做干什么,不如买别人的吧。于是MS就干脆不自己做了,直接去EDG整了个前端,这样就可以少了不少人年。这就是传统土豪和水果这种新暴发户想的不一样的地方。

传统土豪想的是:我们有这么多钱为什么还要自己解决问题呢?买买买!
水果新贵则是:啊呀,不小心有了这么多钱,我们要不要给自己制造点问题好把这些钱花出去?

java写一个行编译器,编译时提示找不到源,问题在string的用法中,是什么原因

把环境变量path,classpath里多余的东西删掉,path里加%JAVA_HOME%\bin;(要确定JAVA_HOME是对的),classpath里先要加上“.;”,再加上这几个包:%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

不知道你的情况是不是和我当初遇到的一样,试试看!

❻ c++编 行编辑器(急用)

别人写的
//送你一个吧.
#include "stdio.h"
#include "stdlib.h"
struct line{
char text[81];
int num; /*行号*/
struct line *next; /*指向下一个输入项目的指针 */
struct line *prior; /*指向前一个项目的指针 */
};
struct line *start; /*指向表中第一个项目的指针 */
struct line *last; /*指向表中作后一个项目的指针 */
struct line *find(int),*dls_store(struct line *);
void patchup(int,int),delete_text(),list(),save(char *),load(char *);
menu_select();
enter(int linenum);

void main(int argc,char *argv[])
{
char s[80],choice,fname[80];
// struct line *info;
int linenum=1;
start=NULL;
last=NULL;
if(argc==2) load(argv[1]);/*装入命令行上的文件 */
do{
choice=menu_select();
switch(choice){
case 1:printf("\t行号:");
gets(s);
linenum=atoi(s);
enter(linenum);
break;
case 2:delete_text();
break;
case 3:list();
break;
case 4:printf("\t文件名:");
gets(fname);
save(fname);
break;
case 5:printf("\t文件名:");
gets(fname);
load(fname);
break;
case 6:exit(0);
}
}while(1);
}

/* 显示菜单,供用户选择 */
menu_select()
{
char s[80];
int c;
printf("\t\t1.输入\n");
printf("\t\t2.删除一行\n");
printf("\t\t3.显示一行\n");
printf("\t\t4.文件存盘\n");
printf("\t\t5.装入文件\n");
printf("\t\t6.退出\n");
do{
printf("\n\n\t\t请按数字选择:");
gets(s);
c=atoi(s);
}while(c<0||c>6);
return(c);
}

/*将文本插在指定行端部 */
enter(int linenum)
{
struct line *info;
//char t[81];
for(;;){
/* */
info=(struct line *)malloc(sizeof(struct line));
if(!info){
printf("\t! 内存不够!\n");
return(NULL);
}
printf("%d:",linenum);
gets(info->text);
info->num=linenum;
if(*info->text){
if(find(linenum)) patchup(linenum,1);
if(*info->text) start=dls_store(info);
}
else break;
linenum++;
}
return(linenum);
}

/*当文本内容插在文件中间时其下面的内容的行号必须增加1,而 */
/*删除时,被删除的文本后面的行号必须减1 */
void patchup(int n,int incr)
{
struct line *i;
i=find(n);
while(i){
i->num=i->num+incr;
i=i->next;
}
}
/*按行号排序后插入 */
struct line *dls_store(struct line *i)
{
struct line *old,*p;
if(last==NULL){
i->next=NULL;
i->prior=NULL;
last=i;
return(i);
}
p=start;
old=NULL;
while(p){
if(p->num){
old=p;
p=p->next;
}
else{
if(p->prior){
p->prior->next=i;
i->next=p;
p->prior=i;
return start;
}
i->next=p;
i->prior=NULL;
p->prior=i;
return(i);
}
}
old->next=i;
i->next=NULL;
i->prior=old;
last=i;
return start;
}

/*删除一行 */
void delete_text()
{
struct line *info;
char s[80];
int linenum;
printf("\t行号:");
gets(s);
linenum=atoi(s);
info=find(linenum);
if(info){
if(start==info){
start=info->next;
if(start) start->prior=NULL;
else last=NULL;
}
else{
info->prior->next=info->next;
if(info!=last)
info->next->prior=info->prior;
else last=info->prior;
}
free(info);
patchup(linenum+1,-1);
}
}

/*查找一行文本 */
struct line *find(int linenum)
{
struct line *info;
info=start;
while(info){
if(linenum==info->num) return(info);
info=info->next;
}
return(NULL);
}

/*显示文本 */
void list()
{
struct line *info;
info=start;
while(info){
printf("%d:%s\n",info->num,info->text);
info=info->next;
}
printf("\n\n");
}

/*存文件 */
void save(char *fname)
{
struct line *info;
char *p;
FILE *fp;
if((fp=fopen("text.txt","w"))==NULL){
printf("\t文件打不开!\n");
exit(0);
}
printf("\t正在存入文件:\n");
info=start;
while(info){
p=info->text;
while(*p) putc(*p++,fp);
//putc('\r',fp);
putc('\n',fp);
info=info->next;
}
fclose(fp);
}

/*装入文件 */
void load(char *fname)
{
struct line *info,*temp;
char *p;
FILE *fp;
//int t,size,inct;
int size,inct;
if((fp=fopen("text.txt","r"))==NULL){
printf("\t文件打不开!\n");
exit(0);
}
while(start){
temp=start;
start=start->next;
free(temp);
}
printf("\n\t正装入文件 !\n");
size=sizeof(struct line);
start=(struct line*)malloc(size);
if(!start){
printf("\n\t内存已经用完!");
return;
}
info=start;
p=info->text;
inct=1;
while((*p=getc(fp))!=EOF){
p++;
while((*p=getc(fp))!='\n') p++;
//getc(fp); /*丢掉'\n' */
*p='\0';
info->num=inct++;
info->next=(struct line*)malloc(size);
if(!info->next){
printf("\n\t内存已经用完!");
return;
}
info->prior=temp;
temp=info;
info=info->next;
p=info->text;
}
temp->next=NULL;
last=temp;
free(info);
start->prior=NULL;
fclose(fp);
}

❼ 在国内从事C/C++编译器的开发有发展前景吗

我给你讲讲我的经历。 我大概十年工作经验,大概五年c++编译器前端经验(在两家500强做静态分析),四五年项目管理和品质过程改善经验。其他主流语言都会用,实现的大概方式也明白。 前一段时间找工作,投了二十几个c++职位一个电话都没有。唯一的面试是朋友内推的阿里的项目管理专家。跑去面试,悲催,直接换岗成p5-p6的测试来面试,问了几个测试问题直接让我回家了(顺便吐槽一下,他们对于测试过程感觉还没问到点上) 最后的结局就是,没人要,转行去制造加工业了。我总结一下为什么找不到工作(可能只是我偏颇的认识:一是这行需求太少,二是hr根本不知道你是干嘛的,三是做这行的根本不好意思写精通c++。

❽ 急求C++行编译器

http://www.cfans8.cn,在这里找

❾ 行编译器是文本编辑器么

行编译器不是文本编辑器.
编译器是用来编译程序代码的,编译的结果是,生成二进制文件和可执行文件,如TC2.0,VC6.0等.
文本编辑器是用来编辑文本的,如windos下的"记事本".

阅读全文

与行编译器项目总结相关的资料

热点内容
ubuntu压缩zip 浏览:2
vigenere算法的方法是什么 浏览:666
pdf保护破解 浏览:341
仿微信聊天系统源码广州公司 浏览:106
怎么查看我的世界服务器日志 浏览:430
怎么从程序员走到成功 浏览:824
把软件放入文件夹中如何移出 浏览:209
红包源码企业即时聊天软件 浏览:581
xp安装python 浏览:10
西门子参数编程读取半径值 浏览:403
洗首饰解压小视频 浏览:966
01背包问题的算法解决 浏览:373
sd卡放哪个文件夹 浏览:301
解释器模式java 浏览:104
android垂直自动滚动条 浏览:153
计算器java小程序 浏览:27
java的简称 浏览:68
云服务器公网ip地址 浏览:581
php对数据库操作 浏览:237
java爬图片 浏览:868