гибкий бизон: создание многосимвольной переменной - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу создать язык программирования, состоящий из нескольких символьных переменных (например, abc = 10, num = 120).Мне удалось создать односимвольную переменную..Y код:

%{
    #include <stdio.h>
                  //char sym[1000];
    //int x=0;
    int sym[26];

%}


%token NUMBER ADD SUB MUL DIV ABS EOL ID ASS
%%
calclist : 
    | calclist exp EOL   { printf("= %d\n", $2); } 
    | ID ASS exp EOL     { sym[$1] = $3;

             }
;
exp:    factor           { $$=$1; }
    | exp ADD factor     { $$ = $1 + $3; }
    | exp SUB factor     { $$ = $1 - $3; }
;
factor :    term         { $$=$1; }
    | factor MUL term    { $$ = $1 * $3; }
    | factor DIV term    { $$ = $1 / $3; }
;
term :  NUMBER       { $$=$1; }

;

%%
int main(int argc, char **argv)
{
yyparse();
}
yyerror(char *s)
{
fprintf(stderr, "error: %s\n", s);
} 

и .l код:

%{
# include "P3.tab.h"
#include <stdio.h>
#include <stdlib.h>
extern int yylval;
//int m=0;
%}

%%
"+"     { return ADD; }
"-"     { return SUB; }
"*"  { return MUL; }
"/"     { return DIV; }
"=" { return ASS; }
[a-z]+  { yylval= *yytext  - 'a' ;  
     return ID ; }
[0-9]+  { yylval = atoi(yytext); return NUMBER; }
\n   { return EOL; }
[ \t]   { /* ignore whitespace */ }
.    { printf("Mystery character %c\n", *yytext); }
%%
int yywrap()
{
return 1;
}

Итак, с помощью этого кода я могу создать только вид = 10, x = 90односимвольная переменная.Как я могу создать переменную из нескольких символов И я также хочу проверить, объявлена ​​ли она уже или нет?

1 Ответ

0 голосов
/ 23 ноября 2018

Это имеет мало общего с зубрами или гибкими.Фактически, ваши гибкие шаблоны уже распознают многосимвольные идентификаторы (при условии, что они являются буквенными), но действие игнорирует символы после первого.

Вам нужен какой-то ассоциативный контейнер, такой как хеш-таблица, который вы можете использовать в качестве таблицы символов вместо вектора sym.

Руководство Bison включает в себя несколько небольшихпример калькулятора программ.См., Например, mfcalc , который включает таблицу символов, реализованную в виде простого списка линейных ассоциаций.

...