我嘗試使用柔性/野牛由下一個模式設置語法:故障使用Flex /野牛
DATA: 1,2,3,4,5 PROGRAM: add,mult,div,read
該輸入必須被轉移到
4 add mult div read 5 1 2 3 4 5
其中:圖4是後一數量的命令「PROGRAM」 和5是「DATA」之後的一些數據。 目前我有下一個代碼。
在asm.y(野牛):
%{
#include<stdio.h>
int comm[100];
int data[100];
int ncomm=0;
int ndata=0;
%}
%token NUMBER
%%
PROGR:"DATA: "INPUT" PROGRAM: "COMMANDS
;
COMMANDS:
| INSTR","COMMANDS
;
| NUMBER","INPUT {data[ndata]=$1; ndata++;}
;
INSTR:NUMBER {comm[ncomm]=$1; ncomm++;}
|"add" {comm[ncomm]=-10000; ncomm++;}
|"mult" {comm[ncomm]=-10001; ncomm++;}
|"div" {comm[ncomm]=-10002; ncomm++;}
|"minus" {comm[ncomm]=-10003; ncomm++;}
//and so on
;
%%
int main(int argc, char** argv)
{
yyparse();
printf("\n%d ",ncomm);
int i;
for(i=0; i<ncomm; i++)
{
printf("%d ",comm[i]);
}
printf("%d ",ndata);
for(i=0; i<ndata; i++)
{
printf("%d ",data[i]);
}
}
yyerror(char* s)
{
printf("error: %s\n",s);
}
而且在asm.l(柔性):
%{
#include "asm.tab.h"
%}
%%
[0-9]+ {return NUMBER;}
%%
所以,畢竟,程序不正確的打印數據,但是,例如
對於
DATA: PROGRAM: add
它打印
DATA: PROGRAM: add
並等待下一個輸入。
在另一方面,對於
DATA: 5 PROGRAM: add
它打印
DATA: error: syntax error
0 0
而且我不知道我做錯了。
非常感謝你的幫助 – Gcinbax
@Gcinbax那麼,你可以點擊我的答案來接受它。 – akim