新编译原理和集合论

1

以句子为单位,理解源代码。

使用集合论,一个句子对应多个字符串,储存在一个集合中。通过集合间的操作,精准地控制集合里边有哪些句子。集合论中的集合,对应文法产生式中的非终结符,但不同之处是,集合论对句子的操作更灵活。具体来说:

分配[30]个[学生类]至[班]。ban=malloc(30*sizeof(Student));

它可以翻译成如上的C语言语句。新编译原理将是一种翻译,从类似自然语言的源代码,翻译成现有的计算机语言的源代码。

如何使用集合论?集合间的运算有“加、减、连接”,分别如下:
A+B,即A并B,在A的基础上再增加一些元素。
A-B,即A交B补,从A中减去一些元素。
AB,两个集合的连接,是把集合中的元素使用排列组合的规律配对,再连接起来。

例:
A={给}
B={老婆,老公……}
C={发红包}
执行集合间连接操作后,ABC={给老婆发红包,给老公发红包,……}

2

说完集合间,说集合内。

集合内有“属于、遍历”函数,使用属于函数,判断给定句子是不是该集合的元素;使用遍历函数,依次输出集合内的所有元素。属于函数用于完成语法分析任务,遍历函数用于显示集合中的所有句子。

对于{自然数}之类的无穷集合,属于函数用正则表达式完成;遍历函数可以显示:0 1 2 3 …,挑几个特征值显示。

集合间的操作可以连成串,如A+BCD-E,这串操作的结果也是个集合,它的属于、遍历函数,是依次执行各个集合的内部函数,再把结果整合起来的结果。

例如,集合间的加操作,C=A+B,C的属于函数就可以写成“属于A或属于B”。对应的遍历函数,也将是执行完A的遍历函数,再执行B的遍历函数。

句子用字符串的集合来实现,那么句子的集合呢?理论上,语境是句子的集合;工程上,用dll包装句子的集合。具有相关、相似功能的句子,放在一个语境中,包装在一个dll里。源代码中使用某语境,即导入相关的dll。

3

如果只有上述内容,将只能完成语法分析,即判断所给句子是否属于该集合。还需要有集合间的映射,才能完成翻译工作。如何完成集合间映射?不同的工程做法不同。

未完待续。

解释上文的内容,为什么要“以句子为单位”?可以参考的内容不多,包括:人们曾经花大力气研究函数图像,但后来发现,复杂图形的函数异常复杂,以至于无法表示。后来就有了“光栅法”,即像bmp格式那样,把每个像素的颜色都记下来,这么做成功了。现在人们研究各种技术,期望实现自然语言理解,甚至是自然语言编程。这和当年研究函数图像十分相似,只要提高数据量,问题的复杂度就能大幅下降。

所以,以句子为单位理解源代码,每个句子都是一门微型语言。给编译器配一个数据库,也是有可能的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值