根据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)
我当时在考虑对倾向性敏感的语言的语法,如果将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) …
我试图理解“确定性上下文无关语法”等表达中的“确定性”是什么意思。(在该字段中还有更多确定性的“事物”)。除了最详尽的解释之外,我将不胜感激一个例子!如果可能的话。 我困惑的主要根源在于无法分辨语法的这种性质与(非)歧义有何不同。 我最想找到的意思是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' …
我对此练习有疑问: 令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 | …