context-free-grammar相关内容
找到了C ++ BNF,接下来还有几行 selection-statement: if ( condition ) statement if ( condition ) statement else statement 现在尝试编写解析器.需要建立解析树.输入时,我有BNF和源文件.但是我被困在如何指向解析器中,如果 condition 评估为true,那么它需要执行第一
..
我正在尝试学习移位减少解析.假设我们有以下语法,它们使用受 ANSI C Yacc语法: S: A; P : NUMBER | '(' S ')' ; M : P | M '*' P | M '/' P ; A : M | A '+' M | A '-' M ; 我们想使用shift-reduc
..
我有以下语法: S→a S b S | b S a S | ε 由于我正在尝试为其编写一个小型编译器,所以我希望使其成为LL(1).我看到这里似乎有一个FIRST/FOLLOW冲突,而且我知道我必须使用替代来解决它,但是我不确定该如何解决.这是我建议的语法,但是我不确定它是否正确: S-> aSbT | epsilon T-> bFaF | epsilon F-> e
..
我必须检查是否可以从给定的上下文中以Chomsky正常形式派生一个字符串.我正在使用C ++. Wikipedia文章中关于CYK算法的伪代码非常好,但是我不太了解. 有人会为我提供另一种用于CYK算法的伪代码来帮助我,还是在Wiki文章中解释该代码? 解决方案 CYK算法以Chomsky正常形式的CFG作为输入.这意味着每个产品都具有以下形式 S→ a,对于某些终端机a
..
我一直想知道为什么似乎没有解析器,例如 BNF ,其行为类似于各种库中的正则表达式. 当然,有些东西是 ANTLR , CFG ,但似乎没有一个没有中间步骤就可以做到这一点的库. 我有兴趣编写 Packrat解析器,以引导所有嵌套的与正则表达式相关的-括号怪癖(对于运动而言,甚至可能更多),但不知何故,我有种感觉,就是我正步入另一个停顿的问题-沼泽类. 这些解析器是否存在技术/理
..
看来递归下降解析器不仅是最简单的解释,而且也是最简单的设计和维护.它们不仅限于LALR(1)语法,而且代码本身可以被凡人理解.相比之下,自底向上的解析器对它们能够识别的语法有限制,并且需要使用特殊工具生成(因为驱动它们的表几乎不可能用手生成). 那么,为什么自下而上(即递减)解析比自上而下(即递归下降)解析更普遍? 解决方案 如果选择功能强大的解析器生成器,则可以对语法进行编码,而不
..
我已经看到此算法应该可以用来删除所有剩余的递归. 但是我在使用这种特定语法时遇到了问题: A -> Cd B -> Ce C -> A | B | f 无论我尝试什么,我最终都会陷入循环或仍然是间接左递归的语法. 在此语法上正确实施此算法的步骤是什么? 解决方案 规则是您首先为非终结点建立某种顺序,然后找到发生间接递归的所有路径. 在这种情况下,顺序将为A
..
我很难理解如何计算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 -
..
前言 我正在尝试编写自己的上下文无关语法规范,以与我的词法分析器/解析器的规则相关联.它的含义与 ANTLR 的相似,其中大写标识符分类为Lexer规则,小写的标识符分类为解析器规则.它旨在接受lexer规则的字符串文字和/或正则表达式的任何组合,以及lexer/regex规则和/或解析器规则的其他解析器标识符的任何组合.每个规则的格式为 :
..
我最近正在尝试自学解析器(针对语言/无上下文语法)的工作方式,除了一件事之外,大多数解析器似乎都有意义.我将注意力集中在 LL(k)语法上,针对这两个主要算法来说,它们是据我所知,递归下降算法适用于所有LL(k)语法,甚至可能更多,而LL解析器适用于所有LL(k)语法.但是,递归下降解析器显然比LL解析器要简单得多(就像LL解析器比LR解析器一样简单.) 所以我的问题是,使用两种算法时可能遇
..
所以我一直在尝试用野牛解析类似Haskell的语言语法.我将省略语法和一元减号的标准问题(例如,-5和\x->x-5中的(-5)是什么,或者如果a-b是a-(b)或apply a (-b),而其本身仍可以是apply a \x->x-b,哈哈.)然后直接进入让我惊讶的事情. 要将整个事情简化到重要的程度,请考虑以下情况: expression: '(' expression ')'
..
有人可以向我解释什么是上下文无关的语法吗?在查看了Wikipedia条目,然后查看了有关正式语法的Wikipedia条目之后,我完全被迷住了.有人会乐于解释这些东西是什么吗? 我想知道这是因为我希望研究解析以及正则表达式引擎的局限性. 我不确定这些术语是否与编程直接相关,或者它们是否与语言学总体上更相关.我很抱歉,如果可以的话,也许可以动议吗? 解决方案 上下文无关文法是一种满
..
所以我一直在尝试用Scala的解析器编写一个计算器,这很有趣,除了我发现运算符的关联性是向后的,并且当我尝试使我的语法左递归时,即使它是完全明确的,出现堆栈溢出. 为了澄清,如果我有一条规则,例如: def减:Parser [Int] = num〜“-"〜加{x => x._1._1-x._2} 然后计算7-4-3得出的结果是6而不是0. 我实际实现此方法的方式是,我正在构成一棵二叉树
..
我正在尝试在语法中添加2项内容: 一元减号,即'-'和 身体感觉 到目前为止,这是我的语法: ::= | ::= | ::= | ::=
..
我正在使用Menhir创建一个解析器,并且有一种行为总是使我绊倒,但我不理解.我创建了以下最小示例来演示它;这显示了Go语言的方法声明中的接收方参数声明( http://golang.org/ref/spec#Method_declarations ): %{ %} %token T_identifier %token T_star %start dem
..
我只是想知道您如何在规则中添加可选的语法? >>> 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' |
..
我正在尝试使用python从定义的语法生成句子,以避免使用我使用特征结构的一致性问题, 这是我到目前为止所做的代码: >>> from __future__ import print_function >>> import nltk >>> from nltk.featstruct import FeatStruct >>> from nltk import gram
..
为了理解cyk算法,我通过以下示例进行了研究:其结果是: 如何提取与每个解析相关的概率并提取最可能的解析树? 解决方案 对于PCFG,这是两个不同的问题: 识别:该句子是否属于CFG生成的语言? (输出:是或否) 分析:这句话的最高评分树是什么? (输出:解析树) 问题中链接的CKY算法视频仅处理识别问题.要同时执行解析问题, 我们要 (i)维持每个解析项目的分数,以及
..
我必须实现水平标记(NLP概念),并且在理解树的外观时遇到了一些麻烦.我一直在阅读克莱因和曼宁的论文,但他们没有解释具有2阶或3阶水平标记的树将看起来像.有人可以对算法进行一些说明吗,应该使树看起来像什么?我是NLP的新手. 解决方案 所以,假设您有一堆扁平规则,例如: NP NNP NNP NNP NNP 或 VP V Det
..
我正在使用带有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
..