亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C指針原理教程之語法樹及其實現

2020-01-26 13:32:32
字體:
來源:轉載
供稿:網友

下面完成一個簡單的計算器通過語法樹進行計算,首先定義一個語法樹的結構,然后編寫flex文件,解析數字或符號,對于 符號返回本身,對于數字,返回NUMBER,并對yylval的d進行賦值,yylval指向一個聯合類型,接著,在語法分析器中完成語法樹的節點的增加,分別對應數字和符號有不同的增加方式,最后有一個單獨的C代碼處理計算,以及語法樹相關計算的函數。對結果的計算的方式是對語法樹進行遞歸。

詞法分析器為:

dp@dp:~/flexbison % cat myast.l%option noyywrap nodefault yylineno%{#include "myast.h"#include "myast.tab.h"char buffer[20];%}EXP ([Ee][-+]?[0-9]+)%%"+"|"-"|"*"|"/"|"("|")"|"|" {return yytext[0];}[0-9]+"."[0-9]*{EXP}?|"."?[0-9]+{EXP}? {yylval.d=atof(yytext);return NUMBER;}/n {return EOL;}"http://".*[ /t] {}"Q" {exit(0);}. {sprintf(buffer,"invalid character %c/n",*yytext); yyerror(buffer);} %%

語法分析器為:

dp@dp:~/flexbison % cat myast.y%{#include <stdio.h>#include <stdlib.h>#include "myast.h"%}%union{struct myast *mya;double d;}%token <d> NUMBER%token EOL%type <mya> exp factor term%%calclist:|calclist exp EOL{printf("= %g/n",eval($2));treefree($2);printf("$");}|calclist EOL{printf("$");};exp:factor|exp '+' factor {$$=newast('+',$1,$3);}  |exp '-' factor{$$=newast('-',$1,$3);};factor:term   |factor '*' term {$$=newast('*',$1,$3);}   |factor '/' term {$$=newast('/',$1,$3);};term:NUMBER{$$=newnum($1);}|'|' term{$$=newast('|',$2,NULL);}|'(' exp ')' {$$=$2;}  |'-' term {$$=newast('M',$2,NULL);};%%

然后頭文件 為:

dp@dp:~/flexbison % cat myast.hextern int yylineno;void yyerror(char *s);struct ast{int nodetype;struct ast *l;struct ast *r;};struct numval{int nodetype;double number;};struct ast *newast(int nodetype,struct ast *l,struct ast *r);struct ast *newnum(double d);double eval(struct ast *);void treefree(struct ast *);

C代碼文件的內容為:

dp@dp:~/flexbison % cat myastfunc.c#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include "myast.h"struct ast * newast(int nodetype,struct ast *l,struct ast *r){struct ast *a=malloc(sizeof(struct ast));if (!a){yyerror("out of space");exit(0);}a->nodetype=nodetype;a->l=l;a->r=r;return a;}struct ast * newnum(double d){struct numval *a=malloc(sizeof(struct numval));if (!a){yyerror("out of space");exit(0);}a->nodetype='D';a->number=d;return (struct ast *)a;}double eval(struct ast *a){double v;    switch(a->nodetype){case 'D':v=((struct numval *)a)->number;break;case '+':v=eval(a->l)+eval(a->r);break;case '-':v=eval(a->l)-eval(a->r);break;case '*':v=eval(a->l)*eval(a->r);break;case '/':v=eval(a->l)/eval(a->r);break;case '|':v=eval(a->l);v=v<0?v:-v;break;case 'M':v=-eval(a->l);break;   defaut:printf("bad node:%c/n",a->nodetype); } return v;}void treefree(struct ast*a){switch(a->nodetype){case '+':case '-':case '*':case '/':treefree(a->r);case '|':case 'M':treefree(a->l);case 'D':free(a);break;default:printf("free bad node %c/n",a->nodetype);}}void yyerror(char *s){fprintf(stderr,"line %d error!:%s",yylineno,s);}int main(){printf("$ ");return yyparse();}

Makefile文件為:

dp@dp:~/flexbison % cat makefilemyjs:myast.l myast.y myast.h bison -d myast.yflex -omyast.lex.c myast.lcc -o $@ myast.tab.c myast.lex.c myastfunc.cdp@dp:~/flexbison %

運行效果如下

dp@dp:~/flexbison % ./myjs$ 12+99= 111$11*(9-3)+6/3= 68$Qdp@dp:~/flexbison % 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美专区第一页| xxav国产精品美女主播| 久久久国产精品一区| 国产成人高清激情视频在线观看| 精品国产欧美成人夜夜嗨| 久久久亚洲精选| 亚洲女人天堂色在线7777| 亚洲激情电影中文字幕| 欧美性猛交xxxx免费看漫画| 97久久精品人人澡人人爽缅北| 美日韩精品免费观看视频| 亚洲人线精品午夜| 欧美精品激情视频| 欧美黄网免费在线观看| 神马久久桃色视频| 国产成人久久精品| 最近2019年好看中文字幕视频| 日韩中文理论片| 亚洲精品视频免费| 久久视频免费观看| 中文字幕日本欧美| 国内精品久久久| 欧美大片网站在线观看| 欧美日韩精品在线播放| 国产精品成人av在线| 亚洲理论片在线观看| 国产成人精品午夜| 国内精品久久久久久久久| 高清亚洲成在人网站天堂| 美日韩精品视频免费看| 久久久久久久av| 在线色欧美三级视频| 色琪琪综合男人的天堂aⅴ视频| 91国自产精品中文字幕亚洲| 欧美视频中文在线看| 久久av红桃一区二区小说| 伊人久久久久久久久久| 91极品视频在线| 欧美华人在线视频| 色妞一区二区三区| 5566日本婷婷色中文字幕97| 国产99久久精品一区二区 夜夜躁日日躁| 日韩福利在线播放| 91亚洲精品久久久久久久久久久久| 欧美巨猛xxxx猛交黑人97人| 日韩av电影手机在线| 中文字幕精品网| 成人国产精品一区二区| 日韩中文字幕在线免费观看| 国产日韩欧美在线看| 日本不卡高字幕在线2019| 成人国内精品久久久久一区| 伊人av综合网| 亚洲激情免费观看| 亚洲欧洲成视频免费观看| 亚洲成人动漫在线播放| 国产91露脸中文字幕在线| 色偷偷综合社区| 欧美一级黑人aaaaaaa做受| 97国产一区二区精品久久呦| 97久久超碰福利国产精品…| 色伦专区97中文字幕| 亚洲精品网址在线观看| 国产一区二区三区毛片| 国产精品大片wwwwww| 欧美在线www| 久久久久久久爱| 日韩欧美国产视频| 高潮白浆女日韩av免费看| 综合欧美国产视频二区| 久久久精品999| 91香蕉电影院| 国产成人福利网站| 欧美一区二粉嫩精品国产一线天| 精品色蜜蜜精品视频在线观看| 久久久国产在线视频| 亚洲免费视频观看| 欧美激情小视频| 国产精品网址在线| 91黄色8090| 成人在线中文字幕| 日韩美女毛茸茸| 国产精品美女视频网站| 日本久久久久亚洲中字幕| 日韩av在线资源| 国产精品av在线| 色综合久久88| 欧美多人爱爱视频网站| 欧美日韩中文字幕综合视频| 一区二区亚洲欧洲国产日韩| 亚洲成人精品视频在线观看| 久久精品99无色码中文字幕| 九九久久久久99精品| 亚洲视频综合网| 国产精品香蕉av| 国产精品视频一区二区三区四| 日韩精品免费看| 亚洲午夜色婷婷在线| 国产精品999| 伊人久久大香线蕉av一区二区| 国产成人在线播放| 91国内揄拍国内精品对白| 久久免费视频网| 亚洲精品网站在线播放gif| 成人性生交大片免费看小说| 国产成人极品视频| 国产精品久久久久久av福利| 欧美丰满老妇厨房牲生活| 久久久欧美精品| 精品国产依人香蕉在线精品| 国产在线精品自拍| 欧美激情按摩在线| 2018中文字幕一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 狠狠色香婷婷久久亚洲精品| 欧美性开放视频| 欧美日韩成人精品| 亚洲人成在线免费观看| 国产精品视频1区| 亚洲网站在线看| 亚洲欧洲成视频免费观看| 日本人成精品视频在线| 久久久久久亚洲| 欧美精品久久久久久久免费观看| 久久精品久久久久电影| 国产精品都在这里| 日韩av在线免费看| 亚洲自拍偷拍视频| 国产精品第100页| 国产精品久久久久久婷婷天堂| 4388成人网| 国产精品精品国产| 亚洲第一区中文字幕| 国产精品亚洲精品| 国产精品欧美一区二区| 久久成年人免费电影| 欧美精品第一页在线播放| 亚洲国产成人精品电影| 91精品视频一区| 在线免费观看羞羞视频一区二区| 51久久精品夜色国产麻豆| 久久免费精品日本久久中文字幕| 亚洲毛片一区二区| 久久在精品线影院精品国产| 国产精品一区二区久久久久| 国产精品成人播放| 亚洲国产日韩欧美在线图片| 日韩亚洲在线观看| 欧美视频一区二区三区…| 日韩欧美国产网站| 日韩免费在线视频| 日韩成人在线播放| 黑人极品videos精品欧美裸| 欧美极品少妇与黑人| 精品亚洲国产成av人片传媒| 亚洲欧美日本精品| 亚洲激情在线视频| 亚洲精品综合久久中文字幕| 激情懂色av一区av二区av| 国产精品美女av| 欧美大荫蒂xxx| 亚洲第一页中文字幕| 精品国产欧美一区二区五十路| 国产成人一区二区|