Questions tagged «formal-grammars»

有关形式语法的问题,形式语言的生成描述。


1
与普通语言的上下文自由交集
上下文无关语言L与常规语言M的交集被称为始终上下文无关。我了解跨产品构造的证明,但是我仍然不明白为什么它是上下文无关的但不是常规的。 由这种相交产生的语言具有PDA 和 DFA 都接受的字符串。由于DFA接受了该语言,因此它不应该是常规语言吗?另外,如果交集是规则的,则也意味着上下文无关,因为所有常规语言也是上下文无关的。 有人可以向我解释为什么通过这种交集获得的语言不规则吗?

2
可确定的非上下文敏感语言
可以说大多数用来描述日常问题的语言都是上下文相关的。另一方面,有可能并且不难找到一些不是递归的,甚至不是递归可枚举的语言。 在这两种类型之间是递归的非上下文敏感语言。维基百科在这里举了一个例子: 不依赖上下文的递归语言的一个示例是其决策是EXPSPACE难题的任何递归语言,例如具有幂运算的一对等价正则表达式对。 那么问题就来了:还有哪些其他问题是可以确定的,但对上下文不敏感?这类问题是否与可判定的EXPSPACE-hard相同?


1
何时获得“从左到右扫描,最右派生”的含义?
根据Wikipedia的文章,的L 表示“从左到右扫描”,“ R”表示“最右派生”。但是,在Knuth关于语法的原始论文中,他将(在第610页)定义为一种语言,该语言“可以从左向右翻译为边界。L R (k )大号[R(ķ)LR(k)L R (k )大号[R(ķ)LR(k)L R (k )大号[R(ķ)LR(k)ķķk 我猜想是选择了这种新术语来补充解析的“从左到右扫描,最左派生”。也就是说,我不知道该术语何时更改了含义。L L (k )大号大号(ķ)LL(k) 有谁知道的新缩写来自哪里?L R (k )大号[R(ķ)LR(k)

2
与上下文无关的语法的前后集是否始终与上下文无关?
令GGG为上下文无关的语法。如果您可以通过将次数乘以零或多次到的开始符号上来获得的一串和的句子,则可以说它是一种句法形式。让是该组中的句型。摹摹GGGGGGGGGSSSSF(G)SF⁡(G)\operatorname{SF}(G)GGG 让,并让是的一个子 -我们称之为一个片段的。现在让α∈SF(G)α∈SF⁡(G)\alpha \in \operatorname{SF}(G)ββ\betaαα\alphaββ\betaSF(G)SF⁡(G)\operatorname{SF}(G) Before(β)={γ | ∃δ.γβδ∈SF(G)}Before⁡(β)={γ | ∃δ.γβδ∈SF⁡(G)}\operatorname{Before}(\beta) = \{ \gamma \ |\ \exists \delta . \gamma \beta \delta \in \operatorname{SF}(G) \} 和 After(β)={δ | ∃γ.γβδ∈SF(G)}After⁡(β)={δ | ∃γ.γβδ∈SF⁡(G)}\operatorname{After}(\beta) = \{ \delta \ |\ \exists \gamma . \gamma \beta \delta \in \operatorname{SF}(G) \}。 是和上下文无关语言?如果不含歧义怎么办?如果明确,是否也可以使用明确的上下文无关语言来描述和吗?Before(β)Before⁡(β)\operatorname{Before}(\beta)After(β)After⁡(β)\operatorname{After}(\beta)GGGGGGBefore(β)Before⁡(β)\operatorname{Before}(\beta)After(β)After⁡(β)\operatorname{After}(\beta) 这是一个后续到我先前的问题,后一个较早的尝试,使我的问题比较容易回答失败。否定的答案将使我正在研究的总体问题很难回答。

2
是{ww | ……}是否与上下文无关?
将语言定义为。换句话说,包含不能表示为重复两次的某个单词的单词。是否与上下文无关?LLLL={a,b}∗−{ww∣w∈{a,b}∗}L={a,b}∗−{ww∣w∈{a,b}∗}L = \{a, b\}^* - \{ww\mid w \in \{a, b\}^*\}LLLLLL 我试图将与相交,但是我仍然无法证明任何东西。我也看了帕里克定理,但这没有帮助。LLLa∗b∗a∗b∗a∗b∗a∗b∗a^*b^*a^*b^*

3
如果将参数添加到上下文无关文法中,将会得到什么?
我当时在考虑对倾向性敏感的语言的语法,如果将CF语法与参数结合使用,它似乎可以解决问题。例如,考虑以下片段,以类似于ANTLR的格式简化Python语法: // on top-level the statements have empty indent program : statement('')+ ; // let's consider only one compound statement and one simple statement for now statement(indent) : ifStatement(indent) | passStatement(indent) ; passStatement(indent) : indent 'pass' NEWLINE ; // statements under if must have current indent plus 4 spaces ifStatement(indent) …

2
在计算机科学的背景下,“生产”一词最终如何成为“规则”一词的同义词?
我正在研究正式的语言和生产基础系统(rule-bases systems),我对为什么这两个词“生产”和“规则”在计算机科学的这么多上下文中含义相同感到有些困惑。 在英语中,它们似乎不是同一意思。我不是英语母语人士,但我知道一条规则是指某人在谈论人时不应该/不应该做的事情,或者如果重复多次会得到相同的结果,并且我们说它按某些规则起作用(它的工作方式由每次都相同的某些协议/过程定义)。 生产是指完全不同的东西...当前正在生产/生产的某些实物或软件的阶段。制作某种东西的行为,无论是物理的还是某种艺术品,一些写作,某些绘画,是由某人的身体或心理能力所制成的。我们说具体的东西产生了。 但是,在计算机科学中,这些代表英语完全不同的词在CS中表示同一件事。这个术语在CS中最终是如何相似的。 有某种计算机科学的词源词典。字典告诉我们计算机科学的术语最终是什么? 顺便说一句:有趣的事实:在此Stack Exchange站点中,既没有生产规则也没有规则。

5
非不确定性与确定性有何不同?
我试图理解“确定性上下文无关语法”等表达中的“确定性”是什么意思。(在该字段中还有更多确定性的“事物”)。除了最详尽的解释之外,我将不胜感激一个例子!如果可能的话。 我困惑的主要根源在于无法分辨语法的这种性质与(非)歧义有何不同。 我最想找到的意思是D. Knuth 在论文《语言从左到右的翻译》中的这句话: Ginsburg和Greibach(1965)定义了确定性语言的概念。我们在第五节中表明,这些正是存在LR(k)语法的语言 一旦到达Section V,它就变成循环了,因为那里说LR(k)解析器可以解析的是确定性语言... 下面是一个示例,可以帮助我理解“歧义”的含义,请看一下: onewartwoearewe 可以将其解析为- one war two ear ewe或o new art woe are we-如果语法允许(例如,它列出了我刚刚列出的所有单词)。 我需要做些什么才能使示例语言具有不确定性?(例如,我可以o从语法中删除单词,以使语法不模糊)。 以上语言是确定性的吗? PS。这个例子来自《哥德尔,埃舍尔,巴赫:永恒的金辫子》一书。 假设我们为示例语言定义了语法,如下所示: S -> A 'we' | A 'ewe' A -> B | BA B -> 'o' | 'new' | 'art' | 'woe' | 'are' | 'one' …

2
除去语法中的左递归,同时保持运算符的左关联
我对此练习有疑问: 令G为λ微积分的以下歧义语法: E → v | λv.E | EE | (E) 其中E是单个非终结符号,λv.E表示带有E中变量v的抽象,而EE表示应用。 定义LL(1)语法G',以使L(G')= L(G)并通过施加以下常用约定来解决G的歧义: 抽象是正确的关联; 申请保持关联; 应用程序具有比抽象更高的优先级。 显示G'的LL(1)解析表和解析字符串时获得的解析树λv1. λv2. v1v2v1。 我消除了歧义设置的优先级和关联,获得了以下语法: E -> EF | F F -> λv.G | G G -> (E) | v 这不是LL(1),因为生产E -> EF是递归的。但是,从该生产中消除左递归可以获得: E -> FE¹ E¹-> FE¹ | ɛ F -> λv.G | …

1
自动机中正则表达式与语法的区别
我是自动机的新手,仅在昨天才对正则表达式进行了简要介绍。我已经阅读了定义正则表达式的各种规则。但是我无法区分正则表达式和某种语言的语法(没有教我正则表达式的语法)。 我知道语法可以帮助我们生成一种语言中的有效字符串,但这就是定义正则表达式状态的规则。那么区别在哪里呢?我问我的教授,他说正则表达式是一种语言中最基本的字符串,语法是任何一种语言的规则集,其顺序比正则表达式高。有人可以提供一些更深入的信息吗?


4
有人可以给一个简单但非玩具的上下文相关语法示例吗?
我正在尝试理解上下文相关的语法。 我明白为什么语言喜欢 { w ^ w ^ | W ^ ∈ 一∗}{ww∣w∈A∗}\{ww \mid w \in A^*\} {anbncn∣n∈N}{anbncn∣n∈N}\{a^n b^n c^n \mid n\in\mathbb{N}\} 不是上下文无关的,但是我想知道一种类似于无类型lambda演算的语言是否上下文相关。 我想看一个简单但非玩具的示例(我考虑了上面的玩具示例),它是上下文相关语法的示例,对于某些生产规则,例如可以判断是否有一些符号字符串当前处于范围内(例如,在生成函数主体时)。 上下文敏感的语法是否足够强大,可以使未定义/未声明/未绑定的变量成为语法错误(而不是语义错误)?

2
所有上下文相关的语言都是可以决定的吗?
我正在浏览上下文相关语言的Wikipedia定义,发现了这一点: 每种语言类别都是其正上方类别的适当子集。每个类别中的任何自动机和任何语法都在其正上方的类别中具有等效的自动机或语法。 我可以看到线性有界自动机在文章的排序器的正下方。如果是这种情况,那么这意味着LBA上的每个计算都将在某个时刻停止(因为每个LBA都是决策者)。但是我觉得可能有一些计算可以同时在LBA上运行而永不停止。例如,我们可以在LBA上编写一个计算 阅读磁带上的第一个符号并向右移动; 阅读下一个符号,然后向左移动。 这种(无用的)计算(显然是LB计算)将无限期地左右摆动,并且永不停止,因此不能作为决策者。我在哪里想错了?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.