Antlr4 解析器忽略词法分析器规则并生成隐式标记
Antlr4 parser ignoring lexer rules and generating implicit tokens
作为一个简单的例子,假设我有以下内容。
parse_rule0 : parse_rule1 ',' parse_rule2 ';' ;
pare_rule1 : ... ;
parse_rule2: ... ;
PUNCTUATION : ',' | '.'| ';' | ':' ;
当 Antlr4(特别是 antlr4 vscode 扩展)去生成标记时,它会忽略我的标点符号规则(只是一个例子)并创建一个隐式标记,例如 T_1 。我似乎无法在网上找到任何资源来从更一般的词汇规则中寻找特定的标记。为解析时可能要查找的每个可能的文字创建词法规则似乎毫无意义。
我四处寻找这个问题的解决方案。如果我想解析在词法规则中定义的特定字符,如何防止 Antlr 仅生成隐式标记并实际读取我的词法规则?
明确使用令牌
parse_rule0 : parse_rule1 PUNCTUATION parse_rule2 PUNCTUATION ;
pare_rule1 : ... ;
parse_rule2: ... ;
PUNCTUATION : ',' | '.'| ';' | ':' ;
每个文字的词法规则
parse_rule0 : parse_rule1 ',' parse_rule2 ';' ;
pare_rule1 : ... ;
parse_rule2: ... ;
COMMA: ',';
DOT: '.';
SEMI: ';';
COLON: ':';
不幸的是,ANTLR 无法将文字与复杂的词法分析器规则相匹配,这些规则甚至只包含备选方案。
作为一个简单的例子,假设我有以下内容。
parse_rule0 : parse_rule1 ',' parse_rule2 ';' ;
pare_rule1 : ... ;
parse_rule2: ... ;
PUNCTUATION : ',' | '.'| ';' | ':' ;
当 Antlr4(特别是 antlr4 vscode 扩展)去生成标记时,它会忽略我的标点符号规则(只是一个例子)并创建一个隐式标记,例如 T_1 。我似乎无法在网上找到任何资源来从更一般的词汇规则中寻找特定的标记。为解析时可能要查找的每个可能的文字创建词法规则似乎毫无意义。
我四处寻找这个问题的解决方案。如果我想解析在词法规则中定义的特定字符,如何防止 Antlr 仅生成隐式标记并实际读取我的词法规则?
明确使用令牌
parse_rule0 : parse_rule1 PUNCTUATION parse_rule2 PUNCTUATION ;
pare_rule1 : ... ;
parse_rule2: ... ;
PUNCTUATION : ',' | '.'| ';' | ':' ;
每个文字的词法规则
parse_rule0 : parse_rule1 ',' parse_rule2 ';' ;
pare_rule1 : ... ;
parse_rule2: ... ;
COMMA: ',';
DOT: '.';
SEMI: ';';
COLON: ':';
不幸的是,ANTLR 无法将文字与复杂的词法分析器规则相匹配,这些规则甚至只包含备选方案。