构建自己的编译器(十)实质性的第二步

本来编译原理是先走了一步,没想到几天没学,课程进度都赶上来了。

 

lalr是在lr1文法百合并同心项得到,就是合并了展望符度,而展望符是用来判断用哪个式知子归约冲突的,将展望符合并了,就是将可道归约的范围扩大了,但每次只能选一个正回确的式子归约。故lalr文法中相对于lr1产生了归约归约冲突答。

例如我现在要创造一个语言,我想创作一个LR文法类型的语言,怎么做?

1. 写出大致的文法

2. 消除规约错误

但是现在学的是,给你一个文法,看它有没有规约错误,如果有错误就不是。充其量学了LL文法的消除错误,对于bison来说,他是通过设定优先级实现的消除错误。

好,那么现在用前端技术做一个简单计算器恐怕是不难,我觉得准能成。

然后前端技术究竟能到什么地步,就往下看了。然后最好实现语言,然后做实验了。

如果自己能够独立完成C--的编译器的话,那么对LALR的理解就会更好,先完成C--,同时明白文法,然后做自己的。

 

 

每日一个知识点:

strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。该函数的返回值是返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

在Unix系统下换行只有\n,MAC OS下只有\r,Windows下是\n\r, \r\n是出错的。换行是\n,回车是\r,Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。因此对于编译器来说,最好不要将回车算在里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值