context-free-grammar相关内容
我怎么知道这些语言是否上下文无关? 解决方案 首先,您应该尝试构建无上下文语法。如果所有产品的左侧仅包含一个非终结符,则语法是上下文无关的。根据定义,如果存在,则该语言是上下文无关的。 等效的构造将是下拉自动机。与DFA相同,但有堆栈。 但是,如果您无法构建语法或自动机,这并不意味着语言不是上下文-自由;也许,只有您一个人不能构建足够棘手的语法(例如,我曾经花了大约7个小时来构
..
我遵循的是从语法中消除左递归的算法,它说如果有的话去除ε 我有以下语法 S-> Aa / b A-> Ac / Sd /∈ 我可以看到去除ε产生后语法变得 1)S-> Aa / a / b 2)A-> Ac / Sd / c / d 我很困惑a / b出现在哪里1)和c / d出现在哪里2) 有人可以解释一下吗? 解
..
嘿,我最近参与了一个编译器开发,我遇到了负号(-)和负数(-1)的问题。假设现在我有5--3、5 + -3,如何编写语法规则,以便在抽象语法树构建期间,yacc会生成正确的抽象语法树? 我的语法像: expr: 常数{} | id {} | exec_expr {} exec_expr: expr PLUS expr {} | expr MINUS expr {} | e
..
假设我有这样的语法: S-> A C x | u B A A-> z A y | u ε B-> x y B u C-> B w B | w A 此语法显然不是LL(1),我可以找到它来构造解析表。但是,如果不使用经典方法,即不构造解析表或发现任何冲突,有什么方法可以证明该语法不是LL(1)? 我该如何将该语法转换为LL(1)?我认为我必须同时使用e
..
我想将幂运算符添加到 Boost精神示例中提供的表达语法. BNF语法如下:(例如,请参见以下答案:“求幂运算的明确语法" ) E -> E + T | E - T | T T -> T * F | T / F | X X -> X ^ Y | Y Y -> i | (E) 我这样翻译成Boost精神: template str
..
我正在尝试学习与编程语言相关的Chomsky层次结构的某些方面,而我仍然必须阅读《龙书》. 我已经读到大多数编程语言都可以解析为上下文无关文法(CFG).就计算能力而言,它等于下推式不确定性自动机之一.我说的对吗? 如果这是真的,那么CFG如何保存一个无限制的语法(UG),该语法即将完成?我之所以问是因为,即使CFG描述了编程语言,它们实际上也被用来描述图灵机,因此是通过UG.
..
我想使用反讽来生成和显示上下文无关文法,到目前为止,我已经能够通过以下代码编写上下文无关文法 public ExpressionGrammar() { //// 1. Terminals Terminal number = new NumberLiteral("number");
..
对于Σ= {0,1,2}上的上下文无关文法G,使用起始变量S: S→0S0 | 1S1 | 2S2 | Y Y→22 如何将其转换为等效的下推式自动机 解决方案 下推式自动机可以将符号推入堆栈顶部并将其弹出.它还可以根据最上面的堆栈符号进行转换.我们需要考虑一种机制,该机制将允许我们通过操纵堆栈来接受正确的语言. 您的语法生成的语言具有以下特征: 它的中间是22 这
..
因此,为了不浪费时间,我想知道从上下文无关的语言(如yacc等产生的)生成随机语句的工作已经完成了.这些语法主要用于解析,但是也许有人已经花了一些时间来测试解析器? 谢谢 解决方案 查看
..
可以根据C语法(在CFG中描述)来解析C程序源代码,并最终将其转换为许多AST.我正在考虑是否存在这样的工具:它可以通过首先随机生成许多AST来做相反的事情,这些AST包括没有具体字符串值的令牌,只是根据CFG的令牌类型,然后生成具体的根据正则表达式中的标记定义进行标记. 我可以想象,第一步看起来像是一个迭代的非终端替换,它是随机的,并可能受到一定数量的迭代次数的限制.第二步只是根据正则表达
..
我正在尝试找出如何正确解析树以显示语法是否模棱两可的方法. 我的语法是S-> xSy | ySx | SS | e 任何帮助都会很棒.预先感谢 下面是我的裂缝... S / \ / \ x y / \ / \ x x y y 解决方案 作为提示,几乎所有带有形式产生形式的语法 S→ SS 将会是模棱两可
..
有人可以向我解释LL(1)语法中应如何使用FIRST和FOLLOW吗?我知道它们用于语法表构建,但是我不知道如何. 解决方案 在LL(1)解析器中,解析器的工作原理是维护一个工作区,该工作区最初是种子到开始符号的,后面是字符串结束标记(通常表示为$).在每个步骤中,它都会执行以下操作之一: 如果工作区的第一个符号是终端,则将其与下一个输入标记进行匹配(如果不匹配,则报告错误). 如
..
给出: 我不知道接受的语言是什么. 通过查看它,您可以获得几个最终结果: 1.) bb 2.) ab(a,b) 3.) bbab(a, b) 4.) bbaaa 解决方案 如何为DFA编写正则表达式 在任何自动机中,状态的目的就像存储元素.状态会自动存储一些信息,例如风扇开关. 一种确定性有限自动机(DFA),称为 finite 自动机,因为有限数量的内存以状态形式
..
我试图弄清楚如何基于给定的正则表达式构造CFG(上下文无关文法)。 例如,a(ab)*(a | b) 我认为有一种算法可以通过,但这确实令人困惑。 这是到目前为止我得到的: S-> aAB; A-> aAb |空; B-> a | b; 这看起来正确吗? 任何帮助将不胜感激。 解决方案 为给定正则表达式构造上下文无关语法的另一种方法是:
..
在哪里可以找到PL/SQL编程语言的官方语法?我看到 Antlr项目具有解决方案 您是说文档吗?知道什么版本的Oracle会有所帮助-此链接涵盖9i(技术上为v9.2).
..
真正的现代正则表达式实际上可以识别哪种语言? 只要有无限长度的捕获组具有反向引用(例如(.*)_\1),则正则表达式现在就会与非常规语言匹配.但是,仅凭它本身还不足以匹配S ::= '(' S ')' | ε之类的东西-匹配配对对的无上下文语言. 递归正则表达式(对我来说是新手,但我确信Perl和PCRE中存在)可以识别至少大多数CFL. 有人在这方面做过或阅读过任何研究吗?这些
..
阅读乔木斯基层次结构 ... ...我知道regexp不能解析2型语法(无上下文语法),也不能解析1型和0型语法. 正则表达式可以解析/捕获所有3类语法(常规语法)吗? 解决方案 是的,只要它们支持交替,串联和Kleene星. PCRE(Perl/Java/JavaScript/PHP/...)类型的正则表达式就是这种情况:交替由((...)|(...))实现,串联由(...)(...)实
..
对于JavaCUP的LR(1)解析器,我有一个简单的语法,它可以识别标识符和字符串的串联表达式.我还想添加一些空函数调用作为可能的串联参数.但是,当我尝试这样做时,会导致移位/减少冲突. 语法: precedence left PLUS; e ::= e exp | exp; exp ::= concat | literal; concatenation
..
我确实需要您的帮助. 我有这些作品: 1) A--> aAb 2) A--> bAa 3) A--> ε 我应该应用乔姆斯基范式(CNF). 为了应用上述规则,我应该: 消除ε生产 消除单一生产 删除无用的符号 我立即陷入困境.原因是A是可为空的符号(ε是其主体的一部分) 我当然不能删除A符号. 有人可以帮助我获得最终解决方案吗? 解决方案 要开
..
我将使用以下EBNF语法为XML的虚构子集创建一个解析器: DOCUMENT ::= ELEMENT ELEMENT ::= START_TAG (ELEMENT | DATA)* END_TAG | EMPTY_TAG START_TAG ::= END_TAG ::= EMPTY_TAG ::=
..