我写的代码似乎无法检测到一个函数。我尝试了很多编辑,但似乎没有任何工作。
program : function-decl | decl | function-def
;
decl : kind var-list SEMICOLON
{
tok_type = "variable";
}
;
kind : KW_INT {integer = true; floatType = false;}
| KW_FLOAT {integer = false; floatType = true;}
;
var-list : ID varmany
{
tok_type = "variable";
t.check_token (tok_type, $1, line_no, bodyCheck, parameter);
}
;
varmany : /*empty*/ | varmany COMMA ID
{
tok_type = "variable";
t.check_token (tok_type, $3, line_no, bodyCheck, parameter );
}
;
function-decl : kind ID LPAR kind RPAR SEMICOLON
{
current_func = $2;
declaration = true;
parameter= false;
tok_type= "function";
t.check_token (tok_type, current_func, line_no, bodyCheck, parameter );
current_func ="";
}
;
function-def : kind ID LPAR kind ID RPAR body
{
current_func = $2;
paramName = $5;
declaration = false;
parameter= false;
tok_type= "function";
t.check_token (tok_type, current_func, line_no, bodyCheck, parameter );
tok_type = "variable";
parameter=true;
t.check_token(tok_type, paramName, line_no, bodyCheck, parameter);
current_func ="";
}
;
例如,对于文本输入:
int main (int DUMMY) {
int x,y,z;
float p;
int main (int x){x = y;}
p = -z * (x/345+y*1.0) + - 300;
p = -z * (x/345+y*1.0) + -300;
while (p>=-(x+y)*3.45/6-z)
z = z + 3;
}
我收到以下错误消息:
第3行声明的局部int变量y 第3行声明的局部int变量z 第3行声明的局部int变量x 第5行声明的局部浮点变量p 第6行声明的局部int变量main。
第6行语法错误,匹配:(
第6行声明的局部int变量x 第6行的语法错误,匹配:)
答案 0 :(得分:0)
您的function_decl
规则只保留一个参数,但不允许使用其名称。