python编一个真值表生成软件_如何构建真值表生成器?

Eric Lippert..

23

这听起来像一个伟大的个人项目.您将学习很多关于编译器基本部分如何工作的知识.我会跳过尝试使用解析器生成器; 如果这是为了您自己的启发,您将从头开始学习更多内容.

这种系统的工作方式是我们理解自然语言的形式化.如果我给你一句话:"狗,罗孚,吃他的食物.",你要做的第一件事就是把它分解成文字和标点符号."The","SPACE","dog","COMMA","SPACE","Rover",......这就是"象征化"或"lexing".

接下来要做的是分析令牌流以查看句子是否具有语法性.英语语法极其复杂,但这句话非常简单.主题同位语谓宾.这是"解析".

一旦你知道这个句子是语法的,你就可以分析这个句子来实际得到它的含义.例如,你可以看到这句话有三个部分 - 主语,同位语和对象中的"他" - 所有这些都指的是同一个实体,即狗.你可以弄清楚狗是吃东西的东西,食物就是被吃掉的东西.这是语义分析阶段.

编译器然后有第四阶段,人类没有,这是他们生成代表语言中描述的动作的代码.

所以,做到这一切.首先定义语言的标记是什么,为每个标记定义基类标记和一堆派生类.(IdentifierToken,OrToken,AndToken,ImpliesToken,RightParenToken ......).然后编写一个接受字符串并返回IEnumerable'的方法.那是你的词法分析者.

其次,弄清楚你的语言的语法是什么,并编写一个递归下降解析器,将IEnumerable分解为一个抽象语法树,代表你语言中的语法实体.

然后编写一个分析器,查看该树并找出数据,例如"我有多少个不同的自由变量?"

然后编写一个代码生成器,它会发出评估真值表所需的代码.吐痰IL似乎有点矫枉过正,但如果你想成为真正的buff,你可以.让表达式树库为您做这件事可能更容易; 您可以将解析树转换为表达式树,然后将表达式树转换为委托,并评估委托.

祝好运!

你可能感兴趣的:(python编一个真值表生成软件_如何构建真值表生成器?)