我正在为COBOL语言编写语法,我制定了一个规则来识别COBOL中的单词。 我的标识符规则是
IDENTIFIER : [a-zA-Z0-9]+ ([-_]+ [a-zA-Z0-9]+)*;
它适用于我的大多数情况,但是当我测试以下输入时
然后它无法正常工作。 请分享您宝贵的想法,以使我正确。我该如何解决这个问题。0000-MAIN-ROUTINE
答案 0 :(得分:0)
根据Regex - Should hyphens be escaped?,连字符应该被视为字符而不是范围操作符(如果它是第一个或最后一个)。这可能不适用于ANTLR4的类似regex的词法分析器定义。
另外,您提出的COBOL字定义存在一些问题
IDENTIFIER:[a-zA-Z0-9] +([ - _] + [a-zA-Z0-9] +)*;
COBOL字有以下规则:
我发现上面提出的定义存在两个问题
我建议COBOL字的以下ANTLR4词法分析器定义:
IDENTIFIER :( [0-9] [0-9 _-] )? [A-Za-z]([A-Za-z0-9 _-] [A-Za-z0-9_])? ;
UITableView