LR(k)个解析器(具有k个无穷大),不限于确定性的上下文无关语言吗?

| 具有无限前瞻性的理论LR解析器是否能够解析(不含歧义的)语言(可以由上下文无关的语法来描述)? 通常,LR(k)解析器仅限于确定性上下文无关语言。我认为这意味着当前必须始终只使用一种语法规则。在当前的前瞻上下文中,最多允许一种可能的解析方式发生。 《语言实现模式》一书指出,“ ...”解析器是不确定的-如果超前集重叠,则它无法确定选择哪种选择。相反,如果存在多个选择,则非确定性解析器仅选择一种方法,然后返回到决策点,如果在某个点上无法继续先前做出的决策,则选择下一个选择。 无论我在哪里阅读LR(k)解析器的定义(例如在Wikipedia或《龙书》中),我总是会读到类似的内容:\“ k是超前标记的数量\”或\“ k> 1 \”的情况,但是从不k可以是无限的。无限前瞻与尝试所有替代方案直到成功都一样吗? 为了(隐式)区分LR(k)解析器和非确定性解析器,是否可以假设k是有限的?     
已邀请:
您在这里提出了几个难以简短回答的问题。尽管如此,我会尝试。 首先,“无限超前”是什么?没有一本书描述这种解析器。如果您对这是什么有清楚的了解,则需要先对其进行描述。之后,我们才能讨论这个主题。目前,解析理论仅讨论LR(k)语法,其中k是有限的。   通常,LR(k)解析器仅限于确定性上下文无关   语言。我认为这意味着必须始终只有一个   当前可以应用的语法规则。 错了LR(k)语法可能具有“语法冲突”。 《龙书》简短地提到了它们,而没有涉及任何细节。 “语法可能有冲突”表示某些语法没有冲突,而其他所有语法都有冲突。当语法没有冲突时,则总是只有一个规则,并且情况相对简单。 当语法有冲突时,这意味着在某些情况下可以应用多个规则。经典解析器在这里无济于事。更糟糕的是,某些输入语句可能具有一组正确的解析,而不仅仅是一组。从语法理论的角度来看,所有这些解析都具有相同的价值和重要性。   《语言实现模式》一书指出,一个...解析器   是不确定的-无法确定哪个替代方案   选择。\” 我的印象是,对于“非确定性解析器”的含义没有明确的共识。我倾向于说不确定性解析器只是随机地选择一种选择并继续进行。 实际上,仅使用了两种解决冲突的策略。第一个是回调处理程序中的冲突解决。回调处理程序是常规代码。编写该程序的程序员会以自己想要的任何方式检查自己想要的内容。此代码仅返回结果-采取什么措施。对于顶部的解析器,此回调处理程序是一个黑匣子。这里没有理论。 第二种方法称为“回溯”。背后的想法很简单。我们不知道要去哪里。好的,让我们尝试所有可能的替代方法。在这种情况下,将尝试所有变体。这里没有确定性的东西。回溯有几种不同的方式。 如果这还不够的话,我可以多写一点。     
非确定性意味着为了产生正确的结果,有限状态机读取令牌,然后使N> 1个下一个状态。如果节点具有相同标签的多个出站边缘,则可以识别不确定的FSM。请注意,并非每个分支都必须有效,但是FSM不能仅选择一个分支。实际上,您可以在此处派生,产生N个状态机,或者可以完全尝试一个分支,然后返回并尝试下一个分支,直到测试了每个传出状态转移。     

要回复问题请先登录注册