Parsing 有没有办法强迫JavaCC接受不明确的非LL(1)语法?

Parsing 有没有办法强迫JavaCC接受不明确的非LL(1)语法?,parsing,compiler-errors,compiler-construction,compiler-warnings,javacc,Parsing,Compiler Errors,Compiler Construction,Compiler Warnings,Javacc,我正试图用JavaCC创建一个说教式的解析器来解释在我的家庭作业中使用lookahead。我正在考虑在porpose上创建一个模棱两可的语法来显示解析器在这种情况下的行为。我的语法如下: void s() : {} { "a" ( bc() | bd() ) <EOF> } void bc() : {} { "b" "c" } void bd() : {} { "b" "d" } 原因是: case 6:{ bc();

我正试图用JavaCC创建一个说教式的解析器来解释在我的家庭作业中使用lookahead。我正在考虑在porpose上创建一个模棱两可的语法来显示解析器在这种情况下的行为。我的语法如下:

void s() : 
{}
{
    "a" ( bc() | bd() ) <EOF>   
}

void bc() :
{}
{
    "b" "c"
}

void bd() :
{}
{
    "b" "d"
}
原因是:

case 6:{
        bc();
        break;
        }{        //Here
        bd();
        break;
        }
我希望解析器能够正常工作,但不能正常工作。难道不是这样吗?如果这个错误是预料之中的,那么有没有一种方法可以使它即使在这种模棱两可的语法下也能工作呢


注意:我还不想使用lookahead,我的目标是在稍后解释如何解决问题时使用它。

现在JavaCC对此没有问题。它生成正确反映.jj文件的警告和.java代码。问题是Java编译器不喜欢无法访问的代码

你能做的就是这样

void s() : 
{}
{
    "a" ( LOOKAHEAD({true})  // TODO fix the lookahead
          bc()
        | 
          bd() )
    <EOF>   
}
void s():
{}
{
“a”(LOOKAHEAD({true})//TODO修复LOOKAHEAD
bc()
| 
bd())
}

现在JavaCC对此没有问题。它生成正确反映.jj文件的警告和.java代码。问题是Java编译器不喜欢无法访问的代码

你能做的就是这样

void s() : 
{}
{
    "a" ( LOOKAHEAD({true})  // TODO fix the lookahead
          bc()
        | 
          bd() )
    <EOF>   
}
void s():
{}
{
“a”(LOOKAHEAD({true})//TODO修复LOOKAHEAD
bc()
| 
bd())
}