я делаю ассемблер. Я использую зубров и гибких, чтобы сделать это.
У меня также есть файл C, в котором у меня есть моя основная функция. Но по какой-то причине после вызова функции yyparse () происходит сбой программы.
Это пример моего кода. Но это имеет тот же результат.
Мой файл lexer.l (lex)
%{
#include <stdio.h>
#include "y.tab.h"
%}
%option nounput yylineno
%%
"sub" return SUB;
";" return SEMICOLON;
. ;
[ \t]+ ;
%%
int yywrap()
{
return 0;
}
Мой файл grammar.y (yacc).
%{
#include <stdio.h>
#include <string.h>
void yyerror(const char *str)
{
fprintf(stderr,"error: %s\n",str);
}
%}
%token SUB SEMICOLON
%%
commands: /* empty */
| commands command
;
command:
sub
;
sub:
SUB SEMICOLON
{
printf("\tSub Detected\n");
}
;
%%
Мой файл main.c.
#include <stdio.h>
extern int yyparse();
extern yy_scan_bytes ( const char *, int);
//My input buffer
char * memblock = "sub;\n";
int main()
{
yy_scan_bytes(memblock, strlen(memblock));
yyparse();
return 0;
}
Наконец, как я скомпилирую.
bison -y -d grammar.y
flex lexer.l
gcc y.tab.c lex.yy.c -c
gcc main.c y.tab.o lex.yy.o
Это результат.
Sub Detected
Segmentation fault
Я хотел бы знать, как исправить ошибку Segmentation fault
. Спасибо.