博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小女也爱葵花宝典---读懂编译原理(1)
阅读量:6205 次
发布时间:2019-06-21

本文共 1231 字,大约阅读时间需要 4 分钟。

  欲练神功,必先看数据结构(图必看),内功心法之葵花宝典 最近在看葵花宝典(编译原理),买了本龙书来看,但是怎么看也看不明白,之后小女我先照的自己的想法写了一次,然后写的时候见的问题,在书中都可以找的到,这样我就看懂龙书了.在此写点东西给大家参考.

 

先看看什么是状态机,上图就是状态机

解答上图:识别一个字符串 I am a boy 首先是状态-是否是空格,然后是-是否是新的单词,只要这两种状态就行了.用两个指针    char* lexemBegin    char* lexemEnd 指向单词的开始:   

    I          am       a        boy

    ↑         ↑

  lexemBegin    lexemEnd

 

然后用指针, lexemEnd读取一个字符,如读I,然后状态 是否是新的单词=是 ,读空格 是否是空格=是,然后就可以判定一个单词的结束.

以上是原理:然后给出代码

typedef struct scrWord{
//这是一个单词表,之后还要用在语义分析 char data[100]; int len; scrWord* next; scrWord* S;//非中终符}scrWord;void cpystr(char* des ,char* scr,int len){ for(int i=0;i
data,0,100);//内存初始化 cpystr(wordTable2->data,lexemBegin,lexemEnd-lexemBegin);//单词表 lpWordTable->next=wordTable2;//用链表生成的单词表 lpWordTable->len=lexemEnd-lexemBegin;// 单词长度 lpWordTable=lpWordTable->next; lexemBegin=lexemEnd; } lexemEnd++; if(lexemEnd-lexemBegin>Wordlen) { return; } }} int main(int argc, char* argv[]){
//调用的例子 scrWord *wordTable=new scrWord(); char * str="create table hts(fe int)"; toker(str,wordTable); return 0;}

 

 

这上为自己写的sql词法分析器,在之后小女将出继编改进词法分析器,并对照龙书.

转载于:https://www.cnblogs.com/baihelianzi/archive/2012/05/15/2501690.html

你可能感兴趣的文章
一小时包教会 —— webpack 入门指南
查看>>
java.net.SocketException: Software caused connection abort: socket write erro
查看>>
oracle异机恢复 open resetlogs 报:ORA-00392
查看>>
关于大学生玩网络游戏的调查问卷
查看>>
解决 Alfred 每次开机都提示请求通讯录权限的问题
查看>>
clear ,refresh,free
查看>>
一起了解原型模式
查看>>
每日一问:LayoutParams 你知道多少?
查看>>
1787: [Ahoi2008]Meet 紧急集合
查看>>
【LATEX】个人版latex论文模板
查看>>
List<String> 和 ArrayList<String>的区别
查看>>
vue项目中对axios的全局封装
查看>>
精通Quartz-入门-Job
查看>>
flash 动画
查看>>
"Hotpatch"潜在的安全风险
查看>>
Linux
查看>>
Ubuntu-16-04-编译-Caffe-SSD
查看>>
工程师、产品经理、数据工程师是如何一起工作的?
查看>>
JVM——类文件结构
查看>>
登录时记住用户名和密码及cookie案例应用
查看>>