首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么语法可以生成字符串,但不能被相同的递归下降解析器识别?

为什么语法可以生成字符串,但不能被相同的递归下降解析器识别?
EN

Stack Overflow用户
提问于 2015-09-25 13:39:18
回答 1查看 333关注 0票数 1

例如,我们有一个文法S-> aSa | aa,很明显,这个文法可以生成所有偶数长度的a字符串。如果我们为这个文法设计一个递归下降解析器,为什么像"aa","aaaa","aaaaaa“这样的输入可以被识别,但”aaaaaa“却不能被识别?

这是我的想法:

对于"aa",尝试S-> aSa,'a‘匹配,但是,'S’不匹配,回溯。尝试S-> aa,matches。

对于"aaaa",尝试S->aSa,'a‘matches,尝试S-> aSa,我们有aaSaa,S not matches,尝试S->aa,我们有aaaa,matches。

对于"aaaaaa",尝试S->aSa,'a‘matches,尝试S->aSa,我们有aaSaa,尝试S-> aSa,我们有aaaSaaa,不匹配,尝试S->aa,我们有"aaaaaa“。

我不知道“aaaaaa”是怎么回事。

为什么aaaaaa无法识别?

EN

回答 1

Stack Overflow用户

发布于 2015-09-25 14:50:05

因为在简单的递归下降解析器中不允许回溯。

递归下降解析器从左到右读取令牌,读取每个令牌一次。

当然,您可以使用回溯递归下降解析器来识别它;但是解析器不再是线性时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32775530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档