Распечатка дерева разбора с использованием bison и lex

Я пытаюсь распечатать дерево разбора из этой функции

function main() {
n = input_int();
for (i=0; i<=n-1; ++i) {
if (isPrime(i)) {
output_int(i);
}
}
return 0;
}

до сих пор я сделал часть с файлом lex.l

 %{
#include <stdio.h>
#include "yacc.tab.h"%}
%%
[{}()] {printf(" \n brackets  %s \n", yytext);return BRACKETS}

(\+|-|\*|=|<|==|<=|&|\|\||%|\+\+) {printf(" \n operator  %s \n",
yytext);return OP}

[0-9]+    {printf(" \n number  %s \n", yytext);return NUMBER};

; {printf(" \n SEMICOLON  %s \n", yytext);return SEMICOLON}

(function|for|if|return|else|false|true){printf("keyword  %s \n", yytext
);return KEYWORD}

(input_int|main|isPrime|output_int) {printf("function name  %s \n", yytext
);return FUNCTION_NAME}

[ndi]     {printf(" \n variable  %s \n", yytext);return VARIABLE}
%%
int yywrap(){
return 1;
}
int main() {
yylex();
return 0;
}

где я получаю токены. Я не понимаю, как мне написать yacc.y и сохранить все токены, чтобы распечатать их. Пока я только сделал эту часть, где

%{
#include <stdio.h>
void yyerror(char *);
int yywrap(void);
int yylex(void);
int yyparse(void);
%}
%token FUNCTION_NAME BRACKETS VARIABLE SEMICOLON OP KEYWORD NUMBER
%start program
%%
program: function;

function:
FUNCTION_NAME BRACKETS BRACKETS
| FUNCTION_NAME BRACKETS VARIABLE BRACKETS{
printf(" %s","function name");}
;

%%

void yyerror(char *s) {
fprintf(stderr, "%s\n", s);
}

функция является корнем. Как сохранить все дерево и распечатать его? Например, когда я запускаю a.exe и ввожу main (), который должен распечатать «function», программа просто выходит, кажется, она выходит после того, как находит первый токен.
Компиляция: lex lex2.l,
yacc -d yacc.y,
gcc lex.yy.c yacc.tab.h
Почему программа закрывается, когда находит первый токен? И не могли бы вы дать краткий пример, как распечатать дерево разбора? Я знаю, что это абстрактный вопрос, но мне нужны только некоторые примеры определения грамматики для кода и распечатки дерева разбора в консоли любым способом

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]