对于确定性的无上下文和明显下推的语言,有哪些好的注释?


10

确定性上下文无关语言(DCFL)和可见下推语言(VPL)都是无上下文语言(CFL)和常规语言(REG)之间的形式语言集。是否存在可以用纯ASCII表示的可读符号,例如CFL的Backus-Naur-Form和REG的正则表达式?


1
阐明问题标题中“好”的含义可能很有用。使用BNF来描述DCFL有什么问题?
伊藤刚(Tsuyoshi Ito)2010年

1
好的,我的意思是它对于人类来说应该很容易读写,因此应该基于ASCII。BNF非常棒-正则表达式是BNF的紧凑子集。但是BNF的哪个子集定义了DCFL,哪个定义了VPL?
雅各布

Answers:


5

q,z,aq,γq,qQzγa输入符号或空字符串。该表示法本身并不强制执行确定性,但很容易对其进行检查。使用无上下文语法表示法(如BNF),由于DCFL是CFL的适当子类,您将遇到问题,并且正如DaniCL所指出的,在给定CFG的情况下,您通常无法确定其语言是否是确定性的。

AaαbAabα

ab


谢谢!关于DCFL,我认为这是正确的方向。对于由正则表达式解析的子集,具体语法会有一些方便的缩写。关于VPL,我还不确定,因为与XML之类的树模型相比,VLP允许悬挂调用和返回符号。您可以更好地将它与来自任意XML树的SAX事件的任意子序列进行比较。我怀疑RelaxNG可以描述这一点。
雅各布2010年

注释“ 使用...”是确定性的。问题就在这附近-它没有提到CFG是否存在一个很明显地描述所有DCFL的子类,而没有其他任何东西。例如LR(k)语法。
reinierpost 2011年

@reinerpost:是的,但是(以我的辩护),我不会考虑使用LR(1)语法来提供语法符号,因为一个人需要检查LR(1)条件。
Sylvain

3

为了找到规范的表示形式,请考虑以下内容:DCFL的类与LR(k)语法生成的语言类等效,该类又与LR(1)等效。这意味着您可以为每个DCFL找到LR(1)语法。当然,LR(1)语法仍然是上下文无关的语法,但是具有特殊的属性:从LR(1)语法中,我们可以轻松地构建解析表来指导确定性解析器(前瞻性为1个符号,因此LR (1))。这些解析表将是另一种表示形式,尽管可读性较差。

顺便说一下,请记住,给定的上下文无关语言是否是确定性的(Greibach定理)是不确定的。

我必须承认我从未听说过VPL。


好吧,规范表示很难读懂,但要感谢指导。如果Greibach定理指出CFL中的某些语言无法确定是否为DCFL中的语言-您如何指定这些语言?如果您有语法,可以用Backus Naur形式(BNF)来表达,那么格赖巴赫定理似乎暗示着没有BNF的子集能精确地表达DCFL?可视下推式语言也称为“嵌套词”。此类语言相对较新,但与解析有序树和类似结构有关。
雅各布2010年

关于不可判定性问题:如果存在生成该语言的上下文无关文法(CFG),则该语言为CFL。如果获得CFG,则可以确定此语法是否为LR(k),因此是确定性的。(下推自动机也是如此-很容易检查给定的PDA是否具有确定性。)但是,假设您的CFG不是LR(k)-这并不意味着该语言不是DCFL ; 您可能无法为其找到LR(k)语法。
DaniCL 2010年

对于固定k,“您可以确定此语法是否为LR(k)”。
西尔万

@Jakob:Greibach定理并没有说明,即使这样做,也仅意味着任意 CFG并不是DCFG的合适表示形式,就像它们不是常规语言的良好表示形式一样(是否CFG还描述了一种不确定的语言)。但是,选择CFG的子类并没有错(例如,常规语言的常规语法)。
reinierpost 2011年

教科书上的措辞传统很松散:当他们的真正意思是“ CFG是否描述常规/确定性不确定”时,他们倾向于做出“不确定CFL是否为常规/确定性”这样的陈述。语言”。
reinierpost 2011年
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.