Java 如何确定哪个解析器规则称为方法?
我需要实现以下功能:我的语法可以接受两个范围的值,Java 如何确定哪个解析器规则称为方法?,java,antlr,Java,Antlr,我需要实现以下功能:我的语法可以接受两个范围的值,Value1和Value2。如果我输入:“设置值1 100”,它应该打印“已接受” 这一切都很好。但我需要改进代码,以便: 每当我给出由数字以外的任何内容组成的值时,我都会打印一条自定义消息 如果整数不在指定的范围内,我将显示一条自定义错误消息,告诉您该值不适用于“inbounds”方法内的value1/value2。问题是,我怎么知道谁叫inbounds 我的代码如下: grammar grammar1; @parser::members {
Value1
和Value2
。如果我输入:“设置值1 100”
,它应该打印“已接受”
这一切都很好。但我需要改进代码,以便:
grammar grammar1;
@parser::members {
private boolean inbounds(Token t, int min, int max) {
int n = Integer.parseInt(t.getText());
if(n >= min && n <= max) {
return true;
}
else {
System.out.println("Value does not lie in the specified range");
return false;
}
}
}
expr : SET attribute EOF;
attribute : Value1 integer1 { System.out.println("Accepted"); }
| Value2 integer2 { System.out.println("Accepted"); }
;
integer1 : Int { inbounds($Int,0,1000) }? ;
integer2 : Int { inbounds($Int,0,10000) }? ;
Int : '0'..'9'+;
SET : 'set';
Value1 : 'value';
Value2 : 'value2';
grammar1;
@解析器::成员{
专用布尔内边界(标记t、最小整数、最大整数){
int n=Integer.parseInt(t.getText());
如果(n>=min&&n这个特殊语法的简单答案:每当max等于1000
,就会通过value
表达式调用inbound
,否则输入是value2
表达式。我的第二个问题有了解决方案:“我怎么知道是谁在bounds中调用了这个方法?”
以下语法正在解决此问题:
grammar first1;
@parser::members {
private boolean inbounds(Token t, int min, int max, String methodName) {
int n = Integer.parseInt(t.getText());
if(n >= min && n <= max) {
return true;
}
else {
System.out.println("The range for value accepted by " + methodName+" is "+min +"-" + max );
return false;
}
}
}
expr : SET attribute EOF;
attribute : Value1 integer1["Value1"] { System.out.println("Accepted"); }
| Value2 integer2 ["Value2"] { System.out.println("Accepted"); }
;
integer1 [String methodName] : Int { inbounds($Int,0,1000,methodName) }? ;
integer2 [String methodName] : Int { inbounds($Int,0,10000,methodName) }? ;
Int : '0'..'9'+;
SET : 'set';
Value1 : 'value';
Value2 : 'value2';
语法优先1;
@解析器::成员{
私有布尔内边界(标记t、最小整数、最大整数、字符串方法名){
int n=Integer.parseInt(t.getText());
如果(n>=min&&n,我们如何在ANTLR:expr:(接受的值){do_Something();}}(对于所有其他值){Print_Error_Message()}中编写这种情况