
编译原理
文章平均质量分 58
KillJUMP
这个作者很懒,什么都没留下…
展开
-
occurs-free
(define occurs-free?(lambda (var exp)(cond((symbol? exp) (eqv? var exp))((eqv? (car exp) ’lambda)(and(not (eqv? var (car (cadr exp))))(occurs-free? var (caddr exp))))(else(or(occurs-free? var (car exp))(occurs-free? var (cadr exp)))))))检测一个符号v原创 2021-05-26 16:07:31 · 134 阅读 · 0 评论 -
《EOPL》学习之解释器的不同写法对比。尾递归和cont的原理。
interp注意,不带cont的a的轻如果是val是常数constex.不带cont的情况,也不带状态state,即无法赋值,传入形式是*(lambda (exp env)*(const-exp (num) (num-val num))a. 不带cont的情况,传入形式是*(lambda (exp env)*(const-exp (num) (num-val num))b. 带cont的情况,传入形式是*(lambda (exp env cont)*(const-exp (num) (a原创 2021-01-06 01:12:54 · 702 阅读 · 0 评论 -
ML函数式编程程序设计笔记-第五章 函数和无穷数据
这一章里这样说道:如果一个函数是作用在其他函数上的画,那么它就是高阶的。(或称为 算子,functional),例如算子map将一个函数应用到表中的每个元素上,由此建立一个新表。算子可以用来构造语法分析器!(第9章)无穷表,它的元素在需要的时候才会进行求值,也可以用过把函数作为数据来实现。一个惰性表的表尾是一个函数,当这个函数被调用时会产生另一个惰性表。惰性表可以是无限长的,而它的任何有限数目的元素都是可以求值的。惰性求值!!先说说无穷表。无穷表在传统上称为”流“stream,在这本书里称为序列原创 2020-09-14 22:03:03 · 268 阅读 · 0 评论 -
语法分析器-LR(1)-FOLLOW集、NULLABLE集、FIRST集、以及分析表的python实现
看了B站卡布同学的【编译原理复习笔记】程序如何识别数学表达式(文法分析,LL1,LR0,SLR分析法)https://www.bilibili.com/video/BV1tJ411k7h7?from=search&seid=12553938159732964604实在是太棒了。于是用python按照他的原理实现了一个LR语法分析器,可以自动生成分析表。除了多出了一个的状态,其他都是对的。(多出的状态是由于卡布没有把S’=>S$这个也放进去处理)我的acc这个应该是在7状态的终结符原创 2020-09-08 22:51:28 · 1686 阅读 · 3 评论 -
至上而下LL(1)分析算法-FIRST集C#实现-词法分析器-编译原理
LL(1)的特点表驱动线性。会有冲突。可以用这个部分来学习分析表的知识。分析表会告诉分析栈一些信息。而分析表是根据语法自动生成的。读入语法,生成了这个表。其实就是之前的算法,每次压入时,压入的是正确的表达式假设我要分析的是我自己写的一个语法,如下:A=B |空B =C C |CC= D E FD=G |空G= a a |aE=H |空H=b b |bF=c c原创 2020-08-31 23:48:24 · 445 阅读 · 0 评论 -
对算数表达式的递归下降分析会遇到的问题
E=E+T|TT=T*F|FF=numparse_E()token =tokens[i++]if(token==num)要走哪个分支呢?是E+T的组合,还是T?这会遇到问题。但是其实E=E+T|T的意思只是在表达:一个T后面有可能接无数个+T而已。以上问题来自https://www.bilibili.com/video/BV17W41187gL?p=474.5.4...原创 2020-08-31 20:48:57 · 253 阅读 · 0 评论