Я немного озадачен тем, как печатать из Бизона.У меня есть проект, в котором я должен взять файл с текстом в качестве входных данных и проверить, является ли он правильным как XML.Я написал BNF в Bison, и я хотел бы напечатать текст из входного файла в стандартный вывод, если он правильный.Я знаю, что могу также распечатать его с флекса, но это не то, что нас просят сделать в проекте. Это часть моего БНФ:
WORKBOOK: WORKBOOK_START INWORKBOOK WORKBOOK_END ;
INWORKBOOK: WORKSHEET MORE_WORKSHEETS | NUM_STYLES WORKSHEET MORE_WORKSHEETS
;
MORE_WORKSHEETS: WORKSHEET MORE_WORKSHEETS | ;
NUM_STYLES: STYLES NUM_STYLES | ;
STYLES: STYLES_START INSTYLES STYLES_END ;
INSTYLES: STYLE INSTYLES | ;
STYLE: STYLE_START INSTYLE STYLE_END ;
INSTYLE: id CLOSE_TAG ;
id: ID EQUAL QUOTES STRING QUOTES ;
WORKBOOK_START, WORKBOOK_END и т. Д. Являются терминальными токенами, которые я хочу распечатать.А вот часть моего гибкого кода и как я печатаю из flex.
"<ss:Workbook>" {printf("%s",yytext); yylval.string = strdup(yytext);return WORKBOOK_START;}
"</ss:Workbook>" {printf("%s",yytext); yylval.string = strdup(yytext);return WORKBOOK_END;}
"<ss:Styles>" {printf("\t%s",yytext); yylval.string = strdup(yytext);return STYLES_START;}
и т. Д. Есть идея?Это правило, что у меня проблема, и я получаю сообщение об ошибке для не обнаруженного типаid: ID {printf("%s",yylval.string);} EQUAL {printf("%s",yylval.string);} QUOTES {printf("%s",yylval.string);} INTEGER {printf("%s",yylval.string);} QUOTES {printf("%s",yylval.string); checkID($4);};