Код, который я написал, кажется, не в состоянии обнаружить функцию. Я перепробовал много правок, но, похоже, ничего не работает.
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;
}
Я получаю эти сообщения об ошибках:
Локальная переменная int, объявленная в строке 3.
Локальная переменная int, объявленная в строке 3.
Локальная переменная int, объявленная в строке 3.
Локальная переменная с плавающей точкой p объявлена в строке 5.
Локальная переменная int main объявлена в строке 6.
синтаксическая ошибка в строке 6, соответствует: (
Локальная переменная int, объявленная в строке 6.
синтаксическая ошибка в строке 6, соответствует:)