[(...)+“中的javacc扩展可以由空字符串错误进行匹配

问题描述 投票:-1回答:1

我正在使用解析器,并且要求为每个关键字引发自定义错误。我的代码如下。

SKIP:  { " " | "\t" | "\n" | "\r" }
TOKEN: { "DEF" | "MAIN" | <NAME: (["A"-"Z"])+> | <PARAM: (["a"-"z"])+> | <NUM: (["0"-"9"])+> }

void Start(): {} {(Def() Func())+ <EOF>}

void Def(): {} {"DEF" | { throw new ParseException("expected keyword DEF"); }}

void Func(): {} {"MAIN" | Name() Param() | { throw new ParseException("Expected MAIN or NAME PARAM"); }}

void Name(): {} {<NAME> | { throw new ParseException("invalid function name"); }}

void Param(): {} { <PARAM> | { throw new ParseException("invalid PARAM"); }}

Start()函数给我一个错误,并告诉我Expansion within "(...)+" can be matched by empty string error。我认为问题出在Name() Param()Func()部分,但我不知道如何更改此设置,同时仍然抛出自定义错误消息。任何人都可以提供一些指针吗?

java error-handling javacc
1个回答
0
投票

虽然我同意user207421的评论,但您可以执行以下操作

void oneOrMoreThings() : {} {
    (Thing() | (throw new ParseException( ... ) ; }
    ( Thing() )*
}
© www.soinside.com 2019 - 2024. All rights reserved.