辅导树实现简单的解析器程序、讲解解析器

- 首页 >> 其他

实施目标

使用树实现简单的解析器



实施内容

从文本输入语句创建数据结构

使用链接列表


从规则输入创建字典

创建一个解析树

解析树的输出


输入类型

第一行:输入要按单词预先定制的句子

用于单词的字母是数字

输入句子 例子:

0 1 0 1 2


规则集输入类型的示例

N 0

P 1

V 2

NP P N

例子的含义

输入语句中的0包含在类别N中

1类包含在P类中

2类包括在V类中

P N包含在NP类别中


全输入示例(0结束)

0 1 0 1 2

N 0

P 1

V 2

NP N P

VP NP V

S NP NP

0


从输入示例解析树进行配置

0 1 0 1 2

N P N P V

NP NP V

NP VP

S


解析树是二叉树(最多2个子节点)

正确的解析树始终是根

所有单词都包含在以S开头的二叉树的叶节点中。

叶节点的数量与单词的数量完全一致


输入示例的输出结果

从树的根部左边的符号输出到每个深度

在数据结构上创建正确的解析树

0 1 0 1 2

N P N P V

NP NP V

NP VP

S


sample_output.txt的内容

S NP NP NP NP NP V N P N P V


目标是正确输出以S结尾的解析

要获得正确的输出,

应该完成在可以创建的所有可能的解析树中,正确的解析只有一个

给定的输入只存在由于输入语句和规则集是在测试用例的基础上给出的,

预创建也是必需的

在Project 2中使用的代码是可重复用的


要注意的事情:

有两种符号组合方式。

根据绑定方法,可能会出现在进行最终解析时不会发生S的情况

重复,直到您创建一个以S开头的精确分析树

创建解析


设置为接收来自用户的输入

程序执行后从用户开始输入

第一行是输入第一行

后续输入用于每个规则

输入0时退出


输入句子的类型:

数字由空格分隔

输入规则的类型:

符号是一系列英文大写字母

最左边的符号是字母顺序

仅以一元规则(例如N 0)的形式,二元规则(例如NP N V)

二元规则的顺序不同(例如,NP N V与NP N V不同)