バイソンでトークンの値を取得しようとしましたが、一度に複数のトークンを取得しているようです。ここに私のフレックスコードがあります:
%{
#include <stdio.h>
#include "y.tab.h"
//YYSTYPE yylval;
%}
semicolon [;]
var [a-c]
digit [0-9]+
string [a-zA-Z]+
%%
Counter {yylval = yytext; return VAR;}
[a-zA-Z0-9]+ { yylval = yytext; return STRING;}
....
ここに私のバイソンコードがあります:
%{
#define YYSTYPE char *
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int limit;
int input;
int count=0;
char a[20];
char message[200];
%}
%token DIGIT VAR OPENPAR CLOSEPAR PETIK
%token WRITELN DO FOR BEGINKEY END TO EQUAL
%token SEMICOLON VARKEY COLON TYPE STRING READLN
%start program
%%
program: dlist slist {printf("L3: HALT");}
;
dlist: /* nothing */
| decl dlist
;
decl: VARKEY VAR COLON TYPE SEMICOLON
;
slist: stmt
| stmt slist
| BEGINKEY FOR VAR EQUAL DIGIT TO DIGIT DO slist END
{
printf("\nBeginFunc\n");
printf("t%d = %d;\n",count,$5);
printf("%s = t%d\n",$3,count);
....
問題は、writeln('forloop'); を入力するときです。プログラムは forloop のみを取得する必要がありますが、forloop を取得します'); しかし、次のように 1 行ずつ入力すると: forloop '); forloop のみが表示されます。この問題の原因は何ですか?