Java 为3种基本数据类型编写ANTLR4语法规则:INT(整数)、FLOAT和CHAR(字符)
下面是我制作的ANTLR语法,但我不知道什么时候我从JAVA检查时发现了一些错误 我的基本目标是为3种基本数据类型建立ANTLR语法规则:INT(整数)、FLOAT和CHAR(字符)。BasForCCal将有更多的lat数据类型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; } @
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')
的弃用通知。请用一个。