2016-03-30 16 views
0

我正在编写代码来生成一个JavaCC分析器,它将读取用户的输入并检查它是否是我的代码中定义的任何一种语言。如何确定用户的输入是否为空?

允许输入的一个条件是它不能为空 - 即用户必须输入除空白区域" "以外的某些字符块(长度大于或等于1)。

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

我写了一个制作(a.k.a规则)来获取用户的输入;它被称为Input()并被宣布为无效。 在main方法,我试图通过写入来编写代码,其确定用户的输入是空的,:

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

然而,我得到当我试图编译终端上显示错误消息,指出一个'空'类型不允许在这里(我相信这是指输入)。

请问有关于解决此问题的提示/提示吗?

+1

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

回答

2

写输入生产这样

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. 
} 
1

更改类型的方法所以这可以返回一个值,你可以验证的结果,当你这样做,但改变这样的比较:

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

另一种选择是,以验证您输入的内部数据方法,所以你保持它像空白。