Java 如何确定哪个解析器规则称为方法?

Java 如何确定哪个解析器规则称为方法?,java,antlr,Java,Antlr,我需要实现以下功能:我的语法可以接受两个范围的值,Value1和Value2。如果我输入:“设置值1 100”,它应该打印“已接受” 这一切都很好。但我需要改进代码,以便: 每当我给出由数字以外的任何内容组成的值时,我都会打印一条自定义消息 如果整数不在指定的范围内,我将显示一条自定义错误消息,告诉您该值不适用于“inbounds”方法内的value1/value2。问题是,我怎么知道谁叫inbounds 我的代码如下: grammar grammar1; @parser::members {

我需要实现以下功能:我的语法可以接受两个范围的值,
Value1
Value2
。如果我输入:
“设置值1 100”
,它应该打印
“已接受”

这一切都很好。但我需要改进代码,以便:

  • 每当我给出由数字以外的任何内容组成的值时,我都会打印一条自定义消息
  • 如果整数不在指定的范围内,我将显示一条自定义错误消息,告诉您该值不适用于“inbounds”方法内的value1/value2。问题是,我怎么知道谁叫inbounds
  • 我的代码如下:

    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()}中编写这种情况