443得票20回答
C++是上下文无关的还是上下文相关的?

我经常听到人们声称C++是一种上下文敏感的语言。看看下面这个例子:a b(c); 这是变量定义还是函数声明?这取决于符号的含义。如果是一个变量,那么a b(c);定义了一个类型为a、名为b且被直接初始化为的变量。但是,如果是一种类型,那么a b(c);声明了一个名为b、接受一个参数 c并返回一...

122得票2回答
什么是无上下文文法?

有人能够向我解释什么是上下文无关文法吗?在查看维基百科条目和形式语法的维基百科条目之后,我完全被困惑了。请问是否有人愿意解释一下这些东西是什么? 我之所以想了解这个问题,是因为我希望研究解析,还有就是了解正则表达式引擎的限制。 我不确定这些术语是否与编程直接相关,或者它们更多地与语言学有关...

116得票8回答
正则文法与上下文无关文法的区别

我正在为我的计算语言测试学习,有一个概念让我难以理解。 我知道正则语法更简单且不能包含歧义,但无法处理编程语言所需的大部分任务。我也知道上下文无关语法允许歧义存在,但可以处理编程语言中一些必要的东西(如回文)。 我不明白的是,如何通过知道正则语法非终结符可以映射到终结符或终结符和非终结符...

93得票1回答
LL解析器和递归下降解析器的区别是什么?

我最近试图自学语言/无上下文语法解析器,大部分内容似乎都很清晰易懂,只有一点不太理解。我特别关注 LL(k) 文法,其中两个主要算法似乎是 LL 解析器(使用堆栈/解析表)和 递归下降解析器(只需使用递归)。 据我所知,递归下降算法可用于所有 LL(k) 文法,可能还有更多,而 LL 解析器...

89得票9回答
哪些编程语言是无上下文的?

或者更准确地说:哪些编程语言是由上下文无关文法定义的? 据我所知,C++不是上下文无关的,因为它包含诸如宏和模板等内容。我的直觉告诉我,函数式语言可能是上下文无关的,但我没有任何硬数据来支持这一点。 对于简洁的示例给予额外的奖励 :-)

83得票1回答
"现代"正则表达式的识别能力

现代正则表达式实际上识别哪一类语言? 当存在一个不受限制长度的捕获组并带有反向引用(例如(.*)_\1)时,正则表达式将匹配非正则语言。但这本身还不足以匹配像S ::= '(' S ')' | ε这样的内容,它是匹配括号对的上下文无关语言。 递归正则表达式(在Perl和PCRE中,我保证这...

64得票7回答
D语言的语法真的是上下文无关的吗?

我几个月前在D的新闻组上发布了这篇文章,但出于某种原因,答案从未真正让我信服,所以我想在这里问一下。 D语言的语法显然是无环境限制的。 然而,C++的语法不是(即使没有宏)。 (请仔细阅读!) 现在承认,我对编译器、词法分析器和解析器一无所知(官方)。所有我知道的都是从网上学到的。 ...

63得票1回答
这种语言能否通过非歧义的BNF文法进行描述?

我重新开始关注语言设计/规范(通过BNF/EBNF语法),这是我离开这个领域20多年以来的第一次(自从我的计算机科学本科毕业以来)。 我只模糊地记得这个领域中的各种相关术语,如LR(1)、LALR等。我一直在尝试通过一些谷歌搜索和阅读来更新,但进展缓慢(可能是因为我在学校里没有完全理解这些东...

49得票3回答
无上下文语法与上下文有关语法的区别?

有人能解释一下为什么这种[上下文无关文法和上下文相关文法]的语法可以接受一个字符串吗? 我所知道的是: 上下文无关文法是一种形式文法,在该文法中,每个产生式(重写)规则都是V→w的形式, 其中V是单个非终结符号,w是终结符和/或非终结符的字符串。 w可以为空。 上下文相关文法是一种形式文...

42得票3回答
LALR和LR解析有什么区别?

我了解LR和LALR都是自下而上的语法分析算法,但它们之间有什么区别呢? LR(0)、LALR(1)和LR(1)语法分析有什么差异?我该如何判断一个语法是否为LR(0)、LALR(1)或LR(1)?