- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到了以下 EBNF在维基百科上,描述 EBNF:
letter = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
symbol = "[" | "]" | "{" | "}" | "(" | ")" | "<" | ">"
| "'" | '"' | "=" | "|" | "." | "," | ";" ;
character = letter | digit | symbol | "_" ;
identifier = letter , { letter | digit | "_" } ;
terminal = "'" , character , { character } , "'"
| '"' , character , { character } , '"' ;
lhs = identifier ;
rhs = identifier
| terminal
| "[" , rhs , "]"
| "{" , rhs , "}"
| "(" , rhs , ")"
| rhs , "|" , rhs
| rhs , "," , rhs ;
rule = lhs , "=" , rhs , ";" ;
grammar = { rule } ;
最佳答案
引用的维基百科摘录不是 EBNF 的正确 EBNF 语法。它也不是左可解析的:实际上,它是不明确的,所以它根本不是可以明确解析的。
一般来说,条款LL(k)
和 LR(k)
(以及许多其他此类条款)适用于 上下文无关语法 (CFG) (以及,通过扩展,由这些语法生成的语言)。 EBNF 不是描述 CFG 的形式主义。它被设计为一种描述上下文无关语言的形式主义,因此应该可以从给定的 EBNF 语法创建一个 CFG(但请参阅注 1),但 EBNF 语法规则和单个语法规则之间没有直接对应关系在 CFG 中生产。
也就是说,您通常可以通过使用一些标准转换来直接创建 CFG。例如:
{ ... }
ε
是空字符串)
M' → ...
M'' → ε
M'' → M' M''
rhs = identifier
| terminal
| "[" , rhs , "]"
| "{" , rhs , "}"
| "(" , rhs , ")"
| rhs , "|" , rhs
| rhs , "," , rhs
;
|
的结合性或优先级。和
,
运营商。 (在语义上,这些运算符没有定义的结合性,但语法仍应指定一个;否则,就不可能明确创建解析树。两个运算符之间的优先级在语义上很重要。)
primary = identifier
| terminal
| "[" , rhs , "]"
| "{" , rhs , "}"
| "(" , rhs , ")"
;
factor = primary , { "|" , primary } ;
rhs = factor , { "," , factor } ;
syntactic exception =
? a syntactic-factor that could be replaced
by a syntactic-factor containing no
meta-identifiers
?
上述文本的意图是将异常(exception)限制为常规语言。这很重要,因为两种上下文无关语言之间的集合差异不一定是上下文无关的,而上下文无关语言和常规语言之间的差异可以证明是上下文无关的。具有讽刺意味的是,描述此限制的“特殊序列”不能表示为上下文无关文法,因为它取决于元标识符的定义。 (如果它说“一个不包含元标识符的句法因素”,那么无需诉诸特殊序列就可以轻松编写,但显然这不是本意。)character
在这两个定义中都是不正确的。 primary
为空。我忽略了它,因为通常不需要它。 关于parsing - Ebnf – 这是 LL(1) 文法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20175248/
我正在尝试实现一个表达式处理语法(处理嵌套括号和其他内容)。到目前为止我有以下内容,但它们无法处理某些情况(成功/失败情况出现在以下代码块之后)。有人知道这是怎么回事吗? 注意:varname +=
我在 ANTLR 语法中写下了以下语句: loopStatement : 'loop' (statement|exit)* 'end' 'loop' ';' ; 如果我没理解错的话,
为 C 的一个子集编写一个简单的 BNF 语法,它支持多个语句,包括赋值、if-else 和没有 block 语句的 while 语句。为你的非终结符使用有意义的名字(相对于神秘的字母)。假设变量由单
我正在尝试为以下语法创建一个 LALR(1) 解析器并发现一些移位/归约冲突。 S := expr expr := lval | ID '[' expr ']' OF expr lval := ID
根据这个paper的规则: If A is the start nonterminal, put EOF in FOLLOW(A) Find the productions with A on the
为 k > 1 制作人工 LR(k) 文法很容易: Input: A1 B x Input: A2 B y (introduce reduce-reduce con
在使用 make 和 bison 的项目中,我很难指定编译语法 grammar.tab.c 依赖于语法输入 grammar.y,每个目标文件都依赖于相应的源文件(包括 grammar.tab.o),并
我正在尝试从语法分析树中提取乔姆斯基范式 (CNF) - 句子的语法产生式: (ROOT (S (NP (DT the) (NNS kids)) (VP (VBD opened)
我知道 ANTLR 可以接受 LL(*) 文法。但是,有没有办法使用 ANTLR 检查语法是否是 LL(1)? 最佳答案 options { k = 1; } 如果您的语法不在 LL(1) 中,
我还没有找到答案。是否存在无法转换为 LL(1) 的上下文无关且无歧义的语法? 我发现了一个我不知道如何转换为 LL(1) 的作品:parameter-type-list C99中的生产: param
我是一名优秀的程序员,十分优秀!