【问题标题】:How can I determine if user's input is empty?如何确定用户的输入是否为空?
【发布时间】:2016-03-30 11:30:31
【问题描述】:

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

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

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

我编写了一个获取用户输入的产品(又名规则);它被称为Input() 并被宣布为无效。 在 main 方法中,我尝试编写代码来确定用户的输入是否为空,方法是:

if parser.Input() == null {
  // print error message onto the screen
}

但是,当我尝试编译时,我在终端上收到一条错误消息,指出此处不允许使用“void”类型(我确定这是指输入)。

我能否提供解决此问题的提示/提示?

【问题讨论】:

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

标签: parsing compiler-construction javacc


【解决方案1】:

像这样编写输入产生式

boolean Input() : {
} {
    <EOF>
    {return true;}
|
   ... // other possibilities here
   {return false;}
}

然后,在main方法中,你可以写

if( parser.Input() ) {
    ... // report error
}

这样就解决了报错的问题。

但是,您可能还想报告找到的语言。为此,您可以创建一个枚举类型并让Input 返回枚举的成员。 EMPTY 可能是其中一种可能性。

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

【讨论】:

    【解决方案2】:

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

    if null==parser.Input(){ //print error message on screen }

    另一种选择是验证输入法中的数据,以便将其保持为无效。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多