Java 为3种基本数据类型编写ANTLR4语法规则:INT(整数)、FLOAT和CHAR(字符)

Java 为3种基本数据类型编写ANTLR4语法规则:INT(整数)、FLOAT和CHAR(字符),java,antlr,grammar,Java,Antlr,Grammar,下面是我制作的ANTLR语法,但我不知道什么时候我从JAVA检查时发现了一些错误 我的基本目标是为3种基本数据类型建立ANTLR语法规则:INT(整数)、FLOAT和CHAR(字符)。BasForCCal将有更多的lat数据类型 grammar BasForCCAL; // Vivek Mishra @header { package basforccal; import java.util.HashMap; } @lexer::header{ package basforccal; } @

下面是我制作的ANTLR语法,但我不知道什么时候我从JAVA检查时发现了一些错误

我的基本目标是为3种基本数据类型建立ANTLR语法规则:INT(整数)、FLOAT和CHAR(字符)。BasForCCal将有更多的lat数据类型

grammar BasForCCAL;
// Vivek Mishra
@header {
package basforccal;
import java.util.HashMap;
}

@lexer::header{
package basforccal;
}

@members{
        String programName;
        boolean errors = false;
        HashMap memory = new HashMap();



        public void checkName(String endName){
            if(!endName.equals(programName)){
            System.out.println("Wrong Program name in end of the program");
            }
        }
}

program : start programbody end;
start   :'PROGRAM' ID {programName = $ID.text ; System.out.println("Checking program :"+$ID.text);};

programbody
    :   devcar*;

devcar  :   initInt var1|
                intFloat var1|
                intChar var1 ;


initInt :   'INT'
        ;

intFloat
    :   'FLOAT'
    ;

intChar:     'CHAR';     
end
        : 'END' ID '.' {checkName($ID.text);};

var1    : idname (',' var1)* ;

idname  :    ID {Integer v = (Integer)memory.get($ID.text);
                    if(v!=null) 
                        {System.err.println("Error: "+$ID.text+" already defined line:"+$ID.getLine());}
                    else
                        {memory.put($ID.text,new Integer('1'));}
                    }
        ;
这就是我在解析器文件中得到的错误

Error:(391, 46) java: cannot find symbol
  symbol:   variable memory
  location: class basforccal.BasForCCALParser
Error:(395, 50) java: cannot find symbol
  symbol:   variable memory
  location: class basforccal.BasForCCALParser

你的语法文件名是什么?它是小写的吗?@Har不,它是大写的“BasForCCAL.g”
ID
的定义在哪里?(我不知道它是否相关,但没有它就不可能编译您的程序。)。。。就我能够编译这个程序的程度而言(删除
@lexer:header
块并给
ID
一个定义,我无法重现。我收到的唯一诊断是
新整数('1')
的弃用通知。请用一个。