文号
t29779
阅读
3159
回复
4
收藏
3
[开源程序]要弄表达式运算,先来学习编译原理~
2010/10/10
IP:安徽
现在又觉得原来那个求导程序有点矬了。。。

主要是读入部分比较恶心,

数据结构不够好,

造成化简困难


昨天借来《编译原理》(龙书)
仔细钻研第一章之后深有感触~
遂择吉日开发此程序~

今天调试了一上午,终于弄懂了~

就是编译器的原理

这个程序主要是负责词法分析的(Parser)

用的结构也很简单,就是函数互相嵌套调用

class Parser{
private:
string lookfd;
    stringstream sin;
public:
bool expr();
bool term();
bool factor();
bool number();
bool identifier();
//bool letter();
//bool digit();
bool match(const string&);
bool get_token();
//void put_back();
bool funcname();
public:
void ClearStringStream(){sin.clear();}
void SetStringStream(const string& s){sin<<s;}
const string & GetStringStream()const {sin.str();}
};

类Parser用于词法分析,其中的lookfd是读入的单词(向前看),sin是输入流,尚未使用
expr()处理整个表达式
term()处理初等项
factor()处理每一个因子
number、funcname、identifier之类的都是基础的东西
用语言描述如下:


剩下的事情就是编程序了。。。

程序不长,还可以顺便输出表达式的后缀表达式


attachment icon Parser.rar 4.18MB RAR 22次下载
15年11个月前IP:未同步
277664
3楼
当时我还是初级阶段。。。
后来重新弄了个类C编译器前端就全会了
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的