【发布时间】:2017-11-05 04:13:34
【问题描述】:
我只是在阅读这个 EBNF 语法时需要帮助,我是新手,不是特别理解第一个,我理解第二个,但只是不明白它与第一个的关系。
Term ::= Primary { (T_STAR|T_SLASH) Term }
主要 ::= T_ICONST | T_SCONST | T_ID | T_LPAREN Expr T_RPAREN
【问题讨论】:
-
看看here。它有一个很好的简单解释。顶部规则意味着符号
Term被转换为符号Primary,然后大括号中的符号重复零次或多次。 -
所以它会类似于“术语被定义为..(Primary 中的所有内容){(T_STAR|T_SLASH) 术语}”但是现在第二个术语是什么意思?
-
将规则解读为
Term可以转到 到right hand side。它更多的是一种转换而不是定义。第二条规则只是意味着符号Primary可以转换为规则右侧由|分隔的任一符号。 -
我现在有点明白了,但是假设我想解析 Primary,我将如何去做。
-
您可以将其替换为规则右侧的任何符号。因此,在这种情况下,您可以通过 4 种方法来转换
Primary。递归解析器根据规则检查符号并沿规则集向下移动,直到成功或失败