Parsing 如何确定用户';s的输入为空?

Parsing 如何确定用户';s的输入为空?,parsing,compiler-construction,javacc,Parsing,Compiler Construction,Javacc,我正在编写代码来生成一个JavaCC解析器,它将读取用户的输入,并检查它是否使用我的代码中定义的一组语言中的任何一种 允许输入的一个条件是它不能为空,即用户必须输入除空格以外的字符块(长度大于或等于1) 我希望能够确定用户的输入是否为空,以便在这种情况下可以在屏幕上打印错误消息 我已经编写了一个产品(也称为规则)来获取用户的输入;它被称为Input(),并被声明为无效。 在main方法中,我尝试通过编写以下代码来确定用户的输入是否为空: if parser.Input() == null {

我正在编写代码来生成一个JavaCC解析器,它将读取用户的输入,并检查它是否使用我的代码中定义的一组语言中的任何一种

允许输入的一个条件是它不能为空,即用户必须输入除空格以外的字符块(长度大于或等于1)

我希望能够确定用户的输入是否为空,以便在这种情况下可以在屏幕上打印错误消息

我已经编写了一个产品(也称为规则)来获取用户的输入;它被称为
Input()
,并被声明为无效。 在main方法中,我尝试通过编写以下代码来确定用户的输入是否为空:

if parser.Input() == null {
  // print error message onto the screen
}
但是,当我尝试编译时,在终端上收到一条错误消息,指出此处不允许使用“void”类型(我确信这是指输入)


可以给我一个/多个提示来解决这个问题吗?

更改您的类型方法,这样它可以返回一个值,并且您可以验证结果,当您这样做时,但更改比较如下:

如果null==parser.Input(){
//在屏幕上打印错误消息
}


另一个选择是验证输入方法中的数据,以便将其保持为空

更改您的类型方法,这样它可以返回一个值,并且您可以在执行此操作时验证结果,但更改比较如下:

如果null==parser.Input(){
//在屏幕上打印错误消息
}


另一个选择是验证输入方法中的数据,以便将其保持为空

这样写输入结果

boolean Input() : {
} {
    <EOF>
    {return true;}
|
   ... // other possibilities here
   {return false;}
}
这解决了报告错误的问题

但是,您可能还希望报告找到的语言。为此,您可以创建枚举类型,并让
Input
返回枚举的成员<代码>空可能是一种可能性

Language lang = parser.Input() ;
switch( lang ) {
    case EMPTY:
        ... // report error
    break ;
    case LANGA:
        ...
    break ; 
    ... // etc.
}

像这样编写输入产品

boolean Input() : {
} {
    <EOF>
    {return true;}
|
   ... // other possibilities here
   {return false;}
}
这解决了报告错误的问题

但是,您可能还希望报告找到的语言。为此,您可以创建枚举类型,并让
Input
返回枚举的成员<代码>空可能是一种可能性

Language lang = parser.Input() ;
switch( lang ) {
    case EMPTY:
        ... // report error
    break ;
    case LANGA:
        ...
    break ; 
    ... // etc.
}

void方法不返回任何值。因此,将void函数返回的值与null(或任何其他值)进行比较是没有意义的。这就是编译器报告错误的原因。void方法不返回任何值。因此,将void函数返回的值与null(或任何其他值)进行比较是没有意义的。这就是编译器报告错误的原因。