Antlr4 不识别标识符
Antlr4 doesn't recognize identifiers
我正在尝试创建一个逐行解析文件的语法。
grammar Comp;
options
{
language = Java;
}
@header {
package analyseur;
import java.util.*;
import component.*;
}
@parser::members {
/** Line to write in the new java file */
public String line;
}
start
: objectRule {System.out.println("OBJ"); line = $objectRule.text;}
| anyString {System.out.println("ANY"); line = $anyString.text;}
;
objectRule : ObjectKeyword ID ;
anyString : ANY_STRING ;
ObjectKeyword : 'Object' ;
ID : [a-zA-Z]+ ;
ANY_STRING : (~'\n')+ ;
WhiteSpace : (' '|'\t') -> skip;
当我将词素 'Object o' 发送到语法时,输出是 ANY 而不是 OBJ。
'Object o' => 'ANY' // I would like OBJ
我知道 ANY_STRING 更长,但我按顺序写了词法分析器标记。有什么问题吗?
非常感谢您的帮助! ;)
对于词法分析器规则,匹配最长的规则获胜,与规则顺序无关。如果匹配长度相同,则第一个列出的规则获胜。
要使规则顺序有意义,请将 ANY_STRING
规则的可能匹配长度减少到等于或小于任何关键字或 ID:
ANY_STRING: ~( ' ' | '\n' | '\t' ) ; // also?: '\r' | '\f' | '_'
更新
要查看词法分析器实际在做什么,。
我正在尝试创建一个逐行解析文件的语法。
grammar Comp;
options
{
language = Java;
}
@header {
package analyseur;
import java.util.*;
import component.*;
}
@parser::members {
/** Line to write in the new java file */
public String line;
}
start
: objectRule {System.out.println("OBJ"); line = $objectRule.text;}
| anyString {System.out.println("ANY"); line = $anyString.text;}
;
objectRule : ObjectKeyword ID ;
anyString : ANY_STRING ;
ObjectKeyword : 'Object' ;
ID : [a-zA-Z]+ ;
ANY_STRING : (~'\n')+ ;
WhiteSpace : (' '|'\t') -> skip;
当我将词素 'Object o' 发送到语法时,输出是 ANY 而不是 OBJ。
'Object o' => 'ANY' // I would like OBJ
我知道 ANY_STRING 更长,但我按顺序写了词法分析器标记。有什么问题吗?
非常感谢您的帮助! ;)
对于词法分析器规则,匹配最长的规则获胜,与规则顺序无关。如果匹配长度相同,则第一个列出的规则获胜。
要使规则顺序有意义,请将 ANY_STRING
规则的可能匹配长度减少到等于或小于任何关键字或 ID:
ANY_STRING: ~( ' ' | '\n' | '\t' ) ; // also?: '\r' | '\f' | '_'
更新
要查看词法分析器实际在做什么,