亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2257 | 回復(fù): 3
打印 上一主題 下一主題

急急急。!關(guān)于Bison 和 flex 使用遇到的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-03-08 09:29 |只看該作者 |倒序瀏覽
本帖最后由 zhangd83 于 2010-03-08 09:32 編輯

我要做的解析器的功能是轉(zhuǎn)換(A語法轉(zhuǎn)換成B語法),
例如:\DCV      UCJCL2,CHAR='&DATA2  ',LEN=8;    -->(轉(zhuǎn)換成)  \JP_DCV UCJCL2 '&DATA2  '

哪位大大會做請貼出例子,謝謝了。。。。。。。!

下面是我自己做的,執(zhí)行結(jié)果有問題:
flex:
/* recognize tokens for the calculator and print them out */
%option noyywrap
%{
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
# include "flex3_tab.h"
%}
IDENTIFIER [a-zA-Z_][A-Za-z0-9_]*
WHITESPACE [ \n\t]
%%

"\\DCV" {return JP_DCV;}
"CHAR" {return CHAR;}
"LEN" {return LEN;}

"," {yylval = " ";return *yytext;}
"=" {return *yytext;}
";"  {return *yytext;}
[0-9]+ { yylval = yytext; return NUMBER; }


{IDENTIFIER} {yylval = yytext; return VAR;}

\'.*\' {yylval = yytext; return STR;}


[ \t\n] { /* ignore whitespace */ }
. { printf("Mystery character %c\n", *yytext); }
%%

----------------------------------------------------------------------------------------------------------------------
Bison:
/* simplest version of calculator */
/* 先掃描匹配,匹配到最高優(yōu)先級語法后解析語法,循環(huán)*/
%{

#include <malloc.h>
#include <stdlib.h>
%}
/* declare tokens */
%token VAR
%token NUMBER STR
%right JP_DCV
%token CHAR LEN
%token '='
%left  ',' ';'
%%
program: /* nothing */
| program exp ';' { printf("| program exp ';' = %s \n", $2); }
| program ';' {printf("| program ';' \n");}
;

exp: factor
| JP_DCV factor {printf("\\JP_DCV\n");printf(" $$:%s, $1:%s, $2:%s, $3:e\n",$$,$1,$2);}
;
factor: term3
| factor term1  {printf("factor term1 : \n");
printf(" $$:%s, $1:%s, $2:%s\n", $$,$1,$2);}

;
term1: term2
| ',' term2 ',' term2  {printf(" ',' term2 ',' term2 : \n");
printf(" $$:%s, $1:%s, $2:%s, $3:%s, $4:%s\n", $$,$1,$2,$3,$4);}
;
term2: term3
| CHAR '=' term3 {printf("CHAR '=' term3: \n");$$ = $3;printf(" $$:%s, $1:%s, $2:%s, $3:%s\n", $$,$1,$2,$3);}
| LEN '=' term3 {printf("LEN '=' term3: \n");$$ = $3;
printf(" $$:%s, $1:%s, $2:%s, $3:%s\n", $$,$1,$2,$3);}

;

term3:  VAR {printf("VAR: \n"); $$ = $1;printf(" $$:%s, $1:%s, $2:e, $3:e\n", $$,$1);}
|  STR {printf("STR: \n");$$ = $1;printf(" $$:%s, $1:%s, $2:e, $3:e\n", $$,$1);}
| NUMBER {printf("NUMBER: \n");$$ = $1;
printf(" $$:%s, $1:%s, $2:e, $3:e\n", $$,$1);}

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


執(zhí)行結(jié)果如下:
VAR:
$$:UCJCL2, $1:UCJCL2, $2:e, $3:e
STR:
$$:'&DATA2  ', $1:'&DATA2  ', $2:e, $3:e
CHAR '=' term3:
$$:'&DATA2  ', $1: , $2: , $3:'&DATA2  '
NUMBER:
$$:8, $1:8, $2:e, $3:e
LEN '=' term3:
$$:8, $1: , $2: , $3:8
',' term2 ',' term2 :
$$: , $1: , $2:'&DATA2  ',LEN=8, $3: , $4:8
factor term1 :
$$:UCJCL2,CHAR='&DATA2  ',LEN=8, $1:UCJCL2,CHAR='&DATA2  ',LEN=8, $2:
\JP_DCV
$$: (null), $1: (null), $2: (null), $3:e
| program exp ';' = (null)


好幾處遞歸返回的值都不是我指定的值,最后還出現(xiàn)了(null)值,實在不知道是怎么回事,哪位大大可以給出個正確答案,貼出個代碼,謝謝。。!

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
2 [報告]
發(fā)表于 2010-03-08 09:45 |只看該作者
殺雞焉須宰牛刀?

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
3 [報告]
發(fā)表于 2010-03-08 09:47 |只看該作者
不過你最好還是解釋一下A到B是怎么轉(zhuǎn)化的,題目的意思不明確

論壇徽章:
0
4 [報告]
發(fā)表于 2010-03-08 10:31 |只看該作者
我實際要做的就是兩種COBOL語法的轉(zhuǎn)換,我要一步一步來,先實現(xiàn)一個最簡單的語法轉(zhuǎn)換再做復(fù)雜的,例子就是上面寫的變量的定義及賦值,
\DCV      UCJCL2,CHAR='&DATA2  ',LEN=8;    -->(轉(zhuǎn)換成)  \JP_DCV UCJCL2 '&DATA2  '
就是說我掃描到\DCV      UCJCL2,CHAR='&DATA2  ',LEN=8;  轉(zhuǎn)換后就應(yīng)該是 \JP_DCV UCJCL2 '&DATA2  ' ,掃描到 \DCV      UCALGO,CHAR='A',LEN=1;轉(zhuǎn)換后就應(yīng)該是 \JP_DCV UCALGO 'A' ,這兩種語法規(guī)則很簡單,大家應(yīng)該一看就明白了,我現(xiàn)在就是寫了代碼來做這個工作,可是始終有問題,麻煩高手幫我修正一下
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP