context-free-grammar相关内容

如何确定一种语言是否上下文无关?

我怎么知道这些语言是否上下文无关? 解决方案 首先,您应该尝试构建无上下文语法。如果所有产品的左侧仅包含一个非终结符,则语法是上下文无关的。根据定义,如果存在,则该语言是上下文无关的。 等效的构造将是下拉自动机。与DFA相同,但有堆栈。 但是,如果您无法构建语法或自动机,这并不意味着语言不是上下文-自由;也许,只有您一个人不能构建足够棘手的语法(例如,我曾经花了大约7个小时来构 ..
发布时间:2020-10-07 18:34:25 其他开发

编译器在解析器过程中如何区分负数和负数

嘿,我最近参与了一个编译器开发,我遇到了负号(-)和负数(-1)的问题。假设现在我有5--3、5 + -3,如何编写语法规则,以便在抽象语法树构建期间,yacc会生成正确的抽象语法树? 我的语法像: expr: 常数{} | id {} | exec_expr {} exec_expr: expr PLUS expr {} | expr MINUS expr {} | e ..
发布时间:2020-10-06 21:53:51 其他开发

如果不使用经典方法并将其转换为LL(1),则查找语法不是LL(1)

假设我有这样的语法: 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 ..

乔姆斯基层次结构和编程语言

我正在尝试学习与编程语言相关的Chomsky层次结构的某些方面,而我仍然必须阅读《龙书》. 我已经读到大多数编程语言都可以解析为上下文无关文法(CFG).就计算能力而言,它等于下推式不确定性自动机之一.我说的对吗? 如果这是真的,那么CFG如何保存一个无限制的语法(UG),该语法即将完成?我之所以问是因为,即使CFG描述了编程语言,它们实际上也被用来描述图灵机,因此是通过UG. ..

对于上下文无关的语法,我如何将其转换为等效的下推自动机?

对于Σ= {0,1,2}上的上下文无关文法G,使用起始变量S: S→0S0 | 1S1 | 2S2 | Y Y→22 如何将其转换为等效的下推式自动机 解决方案 下推式自动机可以将符号推入堆栈顶部并将其弹出.它还可以根据最上面的堆栈符号进行转换.我们需要考虑一种机制,该机制将允许我们通过操纵堆栈来接受正确的语言. 您的语法生成的语言具有以下特征: 它的中间是22 这 ..
发布时间:2020-07-04 20:20:35 其他开发

从无上下文语法生成n条语句

因此,为了不浪费时间,我想知道从上下文无关的语言(如yacc等产生的)生​​成随机语句的工作已经完成了.这些语法主要用于解析,但是也许有人已经花了一些时间来测试解析器? 谢谢 解决方案 查看 ..
发布时间:2020-07-04 02:40:29 其他开发

任何工具都可以根据语言语法随机生成源代码吗?

可以根据C语法(在CFG中描述)来解析C程序源代码,并最终将其转换为许多AST.我正在考虑是否存在这样的工具:它可以通过首先随机生成许多AST来做相反的事情,这些AST包括没有具体字符串值的令牌,只是根据CFG的令牌类型,然后生成具体的根据正则表达式中的标记定义进行标记. 我可以想象,第一步看起来像是一个迭代的非终端替换,它是随机的,并可能受到一定数量的迭代次数的限制.第二步只是根据正则表达 ..
发布时间:2020-07-04 01:35:19 其他开发

LL(1)解析器中FIRST和FOLLOW集的目的?

有人可以向我解释LL(1)语法中应如何使用FIRST和FOLLOW吗?我知道它们用于语法表构建,但是我不知道如何. 解决方案 在LL(1)解析器中,解析器的工作原理是维护一个工作区,该工作区最初是种子到开始符号的,后面是字符串结束标记(通常表示为$).在每个步骤中,它都会执行以下操作之一: 如果工作区的第一个符号是终端,则将其与下一个输入标记进行匹配(如果不匹配,则报告错误). 如 ..
发布时间:2020-06-29 20:56:19 其他开发

这种确定性有限自动机的语言是什么?

给出: 我不知道接受的语言是什么. 通过查看它,您可以获得几个最终结果: 1.) bb 2.) ab(a,b) 3.) bbab(a, b) 4.) bbaaa 解决方案 如何为DFA编写正则表达式 在任何自动机中,状态的目的就像存储元素.状态会自动存储一些信息,例如风扇开关. 一种确定性有限自动机(DFA),称为 finite 自动机,因为有限数量的内存以状态形式 ..

如何基于给定的正则表达式构造CFG

我试图弄清楚如何基于给定的正则表达式构造CFG(上下文无关文法)。 例如,a(ab)*(a | b) 我认为有一种算法可以通过,但这确实令人困惑。 这是到目前为止我得到的: S-> aAB; A-> aAb |空; B-> a | b; 这看起来正确吗? 任何帮助将不胜感激。 解决方案 为给定正则表达式构造上下文无关语法的另一种方法是: ..
发布时间:2020-06-03 20:49:40 其他开发

“现代"的识别能力被称为“现代".正则表达式

真正的现代正则表达式实际上可以识别哪种语言? 只要有无限长度的捕获组具有反向引用(例如(.*)_\1),则正则表达式现在就会与非常规语言匹配.但是,仅凭它本身还不足以匹配S ::= '(' S ')' | ε之类的东西-匹配配对对的无上下文语言. 递归正则表达式(对我来说是新手,但我确信Perl和PCRE中存在)可以识别至少大多数CFL. 有人在这方面做过或阅读过任何研究吗?这些 ..
发布时间:2020-05-25 18:38:34 其他开发

正则表达式解析3型语法

阅读乔木斯基层次结构 ... ...我知道regexp不能解析2型语法(无上下文语法),也不能解析1型和0型语法. 正则表达式可以解析/捕获所有3类语法(常规语法)吗? 解决方案 是的,只要它们支持交替,串联和Kleene星. PCRE(Perl/Java/JavaScript/PHP/...)类型的正则表达式就是这种情况:交替由((...)|(...))实现,串联由(...)(...)实 ..

转换为乔姆斯基范式

我确实需要您的帮助. 我有这些作品: 1) A--> aAb 2) A--> bAa 3) A--> ε 我应该应用乔姆斯基范式(CNF). 为了应用上述规则,我应该: 消除ε生产 消除单一生产 删除无用的符号 我立即陷入困境.原因是A是可为空的符号(ε是其主体的一部分) 我当然不能删除A符号. 有人可以帮助我获得最终解决方案吗? 解决方案 要开 ..