context-free-grammar相关内容

如何建立解析树?

找到了C ++ BNF,接下来还有几行 selection-statement: if ( condition ) statement if ( condition ) statement else statement 现在尝试编写解析器.需要建立解析树.输入时,我有BNF和源文件.但是我被困在如何指向解析器中,如果 condition 评估为true,那么它需要执行第一 ..
发布时间:2020-05-25 01:18:26 C/C++开发

制作语法LL(1)

我有以下语法: S→a S b S | b S a S | ε 由于我正在尝试为其编写一个小型编译器,所以我希望使其成为LL(1).我看到这里似乎有一个FIRST/FOLLOW冲突,而且我知道我必须使用替代来解决它,但是我不确定该如何解决.这是我建议的语法,但是我不确定它是否正确: S-> aSbT | epsilon T-> bFaF | epsilon F-> e ..

CYK算法如何工作?

我必须检查是否可以从给定的上下文中以Chomsky正常形式派生一个字符串.我正在使用C ++. Wikipedia文章中关于CYK算法的伪代码非常好,但是我不太了解. 有人会为我提供另一种用于CYK算法的伪代码来帮助我,还是在Wiki文章中解释该代码? 解决方案 CYK算法以Chomsky正常形式的CFG作为输入.这意味着每个产品都具有以下形式 S→ a,对于某些终端机a ..
发布时间:2020-05-25 01:08:31 C/C++开发

为什么在线解析器似乎停止在正则表达式上?

我一直想知道为什么似乎没有解析器,例如 BNF ,其行为类似于各种库中的正则表达式. 当然,有些东西是 ANTLR , CFG ,但似乎没有一个没有中间步骤就可以做到这一点的库. 我有兴趣编写 Packrat解析器,以引导所有嵌套的与正则表达式相关的-括号怪癖(对于运动而言,甚至可能更多),但不知何故,我有种感觉,就是我正步入另一个停顿的问题-沼泽类. 这些解析器是否存在技术/理 ..
发布时间:2020-05-25 01:03:26 其他开发

为什么自下而上的解析比自上而下的解析更普遍?

看来递归下降解析器不仅是最简单的解释,而且也是最简单的设计和维护.它们不仅限于LALR(1)语法,而且代码本身可以被凡人理解.相比之下,自底向上的解析器对它们能够识别的语法有限制,并且需要使用特殊工具生成(因为驱动它们的表几乎不可能用手生成). 那么,为什么自下而上(即递减)解析比自上而下(即递归下降)解析更普遍? 解决方案 如果选择功能强大的解析器生成器,则可以对语法进行编码,而不 ..
发布时间:2020-05-25 01:02:00 其他开发

逐步消除这种间接的左递归

我已经看到此算法应该可以用来删除所有剩余的递归. 但是我在使用这种特定语法时遇到了问题: A -> Cd B -> Ce C -> A | B | f 无论我尝试什么,我最终都会陷入循环或仍然是间接左递归的语法. 在此语法上正确实施此算法的步骤是什么? 解决方案 规则是您首先为非终结点建立某种顺序,然后找到发生间接递归的所有路径. 在这种情况下,顺序将为A ..
发布时间:2020-05-25 00:59:00 其他开发

LR(1)项目DFA-计算前瞻

我很难理解如何计算LR(1)项的提前期. 让我们说我有这个语法: S -> AB A -> aAb | a B -> d LR(1)项是具有超前功能的LR(0)项.因此,我们将获得状态0的以下LR(0)项目: S -> .AB , {lookahead} A -> .aAb, {lookahead} A -> .a, {lookahead} 状态:1 A - ..
发布时间:2020-05-25 00:57:36 其他开发

使用C ++ 11正则表达式捕获上下文无关文法文件的内容

前言 我正在尝试编写自己的上下文无关语法规范,以与我的词法分析器/解析器的规则相关联.它的含义与 ANTLR 的相似,其中大写标识符分类为Lexer规则,小写的标识符分类为解析器规则.它旨在接受lexer规则的字符串文字和/或正则表达式的任何组合,以及lexer/regex规则和/或解析器规则的其他解析器标识符的任何组合.每个规则的格式为 : ..
发布时间:2020-05-25 00:39:29 C/C++开发

LL和递归下降解析器之间的区别?

我最近正在尝试自学解析器(针对语言/无上下文语法)的工作方式,除了一件事之外,大多数解析器似乎都有意义.我将注意力集中在 LL(k)语法上,针对这两个主要算法来说,它们是据我所知,递归下降算法适用于所有LL(k)语法,甚至可能更多,而LL解析器适用于所有LL(k)语法.但是,递归下降解析器显然比LL解析器要简单得多(就像LL解析器比LR解析器一样简单.) 所以我的问题是,使用两种算法时可能遇 ..

野牛/yacc-优先级设置的限制

所以我一直在尝试用野牛解析类似Haskell的语言语法.我将省略语法和一元减号的标准问题(例如,-5和\x->x-5中的(-5)是什么,或者如果a-b是a-(b)或apply a (-b),而其本身仍可以是apply a \x->x-b,哈哈.)然后直接进入让我惊讶的事情. 要将整个事情简化到重要的程度,请考虑以下情况: expression: '(' expression ')' ..
发布时间:2020-05-25 00:27:58 其他开发

什么是上下文无关语法?

有人可以向我解释什么是上下文无关的语法吗?在查看了Wikipedia条目,然后查看了有关正式语法的Wikipedia条目之后,我完全被迷住了.有人会乐于解释这些东西是什么吗? 我想知道这是因为我希望研究解析以及正则表达式引擎的局限性. 我不确定这些术语是否与编程直接相关,或者它们是否与语言学总体上更相关.我很抱歉,如果可以的话,也许可以动议吗? 解决方案 上下文无关文法是一种满 ..
发布时间:2020-05-25 00:16:13 其他开发

使用Scala解析器的运算符关联性

所以我一直在尝试用Scala的解析器编写一个计算器,这很有趣,除了我发现运算符的关联性是向后的,并且当我尝试使我的语法左递归时,即使它是完全明确的,出现堆栈溢出. 为了澄清,如果我有一条规则,例如: def减:Parser [Int] = num〜“-"〜加{x => x._1._1-x._2} 然后计算7-4-3得出的结果是6而不是0. 我实际实现此方法的方式是,我正在构成一棵二叉树 ..
发布时间:2020-05-21 20:01:50 其他开发

看似等效的门希尔(Menhir)规则改变了语法中的移位/减少冲突

我正在使用Menhir创建一个解析器,并且有一种行为总是使我绊倒,但我不理解.我创建了以下最小示例来演示它;这显示了Go语言的方法声明中的接收方参数声明( http://golang.org/ref/spec#Method_declarations ): %{ %} %token T_identifier %token T_star %start dem ..

NLTK上下文无关的语法

我只是想知道您如何在规则中添加可选的语法? >>> import nltk >>> nltk.app.rdparser() 例如,添加可选语法的常规方法是将其放在括号中:NP-> NP(PP) 但是在程序中您将如何做?括号不起作用. S Þ NP VP NP Þ NP PP | Det N VP Þ V NP PP PP Þ P NP Det Þ 'the' | ..
发布时间:2020-05-18 01:23:46 Python

从cyk提取概率和最有可能解析树

为了理解cyk算法,我通过以下示例进行了研究:其结果是: 如何提取与每个解析相关的概率并提取最可能的解析树? 解决方案 对于PCFG,这是两个不同的问题: 识别:该句子是否属于CFG生成的语言? (输出:是或否) 分析:这句话的最高评分树是什么? (输出:解析树) 问题中链接的CKY算法视频仅处理识别问题.要同时执行解析问题, 我们要 (i)维持每个解析项目的分数,以及 ..

水平马尔可夫化

我必须实现水平标记(NLP概念),并且在理解树的外观时遇到了一些麻烦.我一直在阅读克莱因和曼宁的论文,但他们没有解释具有2阶或3阶水平标记的树将看起来像.有人可以对算法进行一些说明吗,应该使树看起来像什么?我是NLP的新手. 解决方案 所以,假设您有一堆扁平规则,例如: NP NNP NNP NNP NNP 或 VP V Det ..
发布时间:2020-05-18 00:50:12 其他开发

NLTK上下文自由语法生成

我正在使用带有Unicode字符的非英语解析器.为此,我决定使用NLTK. 但是它需要一个预定义的无上下文语法,如下所示: S -> NP VP VP -> V NP | V NP PP PP -> P NP V -> "saw" | "ate" | "walked" NP -> "John" | "Mary" | "Bob" | Det N | Det N PP ..
发布时间:2020-05-18 00:47:51 Python