COTL的ANTLR语法标识符

时间:2015-09-23 07:46:29

标签: antlr antlr4 cobol

我正在为COBOL语言编写语法,我制定了一个规则来识别COBOL中的单词。 我的标识符规则是

IDENTIFIER : [a-zA-Z0-9]+ ([-_]+ [a-zA-Z0-9]+)*;

它适用于我的大多数情况,但是当我测试以下输入时

  

0000-MAIN-ROUTINE

然后它无法正常工作。 请分享您宝贵的想法,以使我正确。我该如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

根据Regex - Should hyphens be escaped?,连字符应该被视为字符而不是范围操作符(如果它是第一个或最后一个)。这可能不适用于ANTLR4的类似regex的词法分析器定义。

另外,您提出的COBOL字定义存在一些问题

  

IDENTIFIER:[a-zA-Z0-9] +([ - _] + [a-zA-Z0-9] +)*;

COBOL字有以下规则:

  • 由字符[A-Za-z0-9 _-]
  • 组成
  • 可能无法以 - dash
  • 开头或结尾
  • 不能以_ underscore
  • 开头
  • 必须包含至少一个大写或小写字母alpha [A-Za-z]

我发现上面提出的定义存在两个问题

  1. 不允许下划线作为最终字符
  2. 不需要字母字符。例如,上面的定义允许所有数字。
  3. 我建议COBOL字的以下ANTLR4词法分析器定义:

      

    IDENTIFIER :( [0-9] [0-9 _-] )? [A-Za-z]([A-Za-z0-9 _-] [A-Za-z0-9_])? ;

    UITableView