生产中可选的非终端

时间:2011-09-20 15:38:41

标签: c++ parsing recursive-descent

有谁知道如何处理以下情况?

if-section:
    if-group [ elif-groups ] [ else-group ] endif-line

if-group:
    ....

elif-groups:
    elif-group
    elif-groups elif-group

elif-group:
    "#" "elif" constant-expression new-line [ group ]

else-group:
    "#" "else" new-line [ group ]

endif-line:
    "#" "endif" new-line

if-section之后if-section中的所有非终端以“#”开头。我认为在这种情况下,左翼因素是不可能的。是否有任何“默认解决方案”来确定我是否必须同时拨打这两个(或两个)可选的非终端中的一个?

感谢。

1 个答案:

答案 0 :(得分:0)

我不清楚需要处理什么。当你看到[ elif-groups ]时,你无法区分[ else-group ]#,没有。但如果你向前看另一个令牌,你可以。即两个令牌足以决定。

到目前为止,这不是C ++语法中最糟糕的一点。