我在这个问题了一整天,我找不出什么是错的..野牛:表达故障
比方说,我有这样的代码:
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
extern int error;
extern int yylineno;
extern char *yytext;
int errors = 0;
%}
%start main_struct
%token INT 1
%token COMMA 2
%token LEFT_PARENTHESIS 3
%token RIGHT_PARENTHESIS 4
%token K_BEGIN 5
%token END 6
%%
main_struct: functions_declaration
;
functions_declaration: function
| functions_declaration function
;
function: data_type identifier1 LEFT_PARENTHESIS vars_in_func RIGHT_PARENTHESIS
K_BEGIN function_body END;
vars_in_func: /*empty*/
| vars_in_f
;
vars_in_f: data_type identifier1
| vars_in_f COMMA data_type identifier1
;
function_body: /*empty*/
;
data_type: INT
;
identifier1: IDENTIFIER
| identifier1 COMMA IDENTIFIER
;
%%
int main()
{
if (yyparse() == 0 && error==0){
printf("Accepted\n");
}
else{
printf("Rejected\n");
}
}
yyerror(char *s){
printf ("%s:at line %d\n", s,yylineno);
errors++;
}
当我尝试在此表达式:INT FOO (INT X,int y)对开始结束
它承认 “INT” “富” “(” 然后报告存在错误,为什么不能接受?
什么是错误? – Victory
@胜利对不起,如果我不清楚。我的语法应该可以识别所有行但是它只识别前3个标记。 int foo和(然后抛出错误..但我不明白为什么它会这样做 –
Manos
是的,这将是很好的看到错误的文本/输出 – Victory