博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua5.0 词法分析
阅读量:7197 次
发布时间:2019-06-29

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

  hot3.png

语法分析器会调用词法分析器。

在语法分析之前,简单的看一下词法分析。

内存管理和 ZIO 输入在词法分析中会用到,因为它们相对比较孤立,不影响主流程的阅读。

上一个版本也看过它们了,这里就不再重复了。

词法分析最重要的函数就是

int luaX_lex (LexState *LS, SemInfo *seminfo);

如果你用其它的词法分析工具生成器,生成的词法分析器也会有个类似的函数。

这个函数主要就是从源代码中读出一个 token 返回给语法分析器。

在语法分析的 next 和 lookhead 中会调用到它:

static void next (LexState *ls) {   ls->lastline = ls->linenumber;  if (ls->lookahead.token != TK_EOS) {  /* is there a look-ahead token? */    ls->t = ls->lookahead;  /* use this one */    ls->lookahead.token = TK_EOS;  /* and discharge it */  }  else    ls->t.token = luaX_lex(ls, &ls->t.seminfo);  /* read next token */}static void lookahead (LexState *ls) {  lua_assert(ls->lookahead.token == TK_EOS);  ls->lookahead.token = luaX_lex(ls, &ls->lookahead.seminfo);}

可以看到,返回一个 token 类型和一个表示表示 token 信息的结构体。

typedef union {  lua_Number r;  TString *ts;} SemInfo;  /* semantics information */typedef struct Token {  int token;  SemInfo seminfo;} Token;

luaX_lex 返回的就是 Token 结构体中的 token 类型字段。

如果类型字段不足以描述它自己的话,Token 中的 seminfo 字段就派上用场了。

比如:

对于大于小于这种比较运算,直接返回 token 就完事儿了。

case '<': {  next(LS);  if (LS->current != '=') return '<';  else { next(LS); return TK_LE; }}case '>': {  next(LS);  if (LS->current != '=') return '>';  else { next(LS); return TK_GE; }}

而对于像是数值 TK_NUMBER,字符串型 TK_STRING 则需要将具体的 value 设置给 seminfo。 

可以认为 Token 结构体表示的为 type-value 或者 key-value 对。

转载于:https://my.oschina.net/xhan/blog/500338

你可能感兴趣的文章
Eclipse设置项目默认编码和换行符类型
查看>>
【实用性程序】弧微分计算圆周长
查看>>
算法模板——平衡树Treap
查看>>
1819: [JSOI]Word Query电子字典
查看>>
10分钟学会AngularJS的数据绑定
查看>>
Flash Stage3D Molehill 学习笔记(2)
查看>>
JsDoc脚本注释文档生成
查看>>
基于人脸识别的考试系统16
查看>>
如何在eclipse模拟器上运行下载好的apk程序
查看>>
DTCMS插件的制作实例电子资源管理(一)插件目录结构
查看>>
《领域模型》——第四部分-战略设计
查看>>
微信开发之调起摄像头、本地展示图片、上传下载图片
查看>>
对于使用了SSH造成的中文乱码问题,4大解决方法
查看>>
PAT Advanced 1023 Have Fun with Numbers
查看>>
python多线程threading下载示例
查看>>
python常见问题解决方案
查看>>
【算法学习笔记】77.双线棋盘 动态规划 SJTU OJ 1263 纸来纸去
查看>>
OnSubmit中的Ajax判断
查看>>
CF1117G Recursive Queries
查看>>
愤怒的小鸟 高清完整版下载
查看>>