没有合适的资源?快使用搜索试试~ 我知道了~
JSFormatter文档1
需积分: 0 1 下载量 52 浏览量
2022-08-04
14:35:20
上传
评论
收藏 203KB PDF 举报
温馨提示
试读
7页
2.1 字符类型 2.2 归约规则 2.3 实现 3.1 归约规则 3.2 格式规则 3.3 实现
资源推荐
资源详情
资源评论
JSFormatter 文档
1 基本思想
格式化的过程主要分为两步:第一步是基于字符(char)的 LR(0)词法分析,通过连续的两个字符
charA 和 charB,将按字符读入的源代码分割成词(token);第二步则根据词法分析得到的连续两个词
tokenA 和 tokenB 进行 LR(0)语法分析,根据规则输出 tokenA。
2 词法分析
词法分析通过 charB 对 charA 的类型进行判断,处理 charA,可能将 charA 加入 tokenB,也可能
丢弃 charA,通过 charB 也能判断词的分割点。分割完成后的词已经存入 tokenB,给语法分析使用,主
要的代码在 GetToken 函数中。
2.1 字符类型
● 一般字符:'a'-'z', '0'-'9', 'A'-'Z', '_', '$'以及所有值大于 126 的字符(主要是非
ASCII 字符,如中文)。
● 空白字符:' ', ' ', ''。这里注意的是''也就是回车不被认为是空白字符,回车会被当
作一个词提供给语法分析过程。我不想破坏那些有助于提高代码可阅读性的空白换行,后面会有
策略来处理多个连续的换行。
● 单字符符号:'.', '(', ')', '[', ']', '{', '}', ':', ',', ';', '~', ''。这些操
作符长度一定是一个字符。
● 引号:'\'', '\"'。
● 注释:注释不得不同时判断 charA 和 charB,charA 是'/'并且 charB 是'/'或者'*'。
对于判断正则表达式和正负数(例如:-1),需要在语法层面进行分析,后面会讲到。
2.2 归约规则
CHAR=所有字符,NORCHAR=一般字符,BLACHAR=空白字符,SINCHAR=单字符符号,QUOCHAR=引号,
COMMCHAR=注释,OTHCHAR=其它字符
CHAR=NORCHAR|BLACHAR|SINCHAR|QUOCHAR|COMMCHAR|OTHCHAR
正则表达式 REGULAR=/CHAR*/
注释 COMMENT=// CHAR* //|/* CHAR* */
字符串型 STRING=NORCHAR*|-NORCHAR*|+NORCHAR*
符号型 OPER=SINCHAR|OTHCHAR|OTHCHAR OTHCHAR|OTHCHAR=|===|!===
OPER=OTHCHAR|OTHCHAR OTHCHAR 的判断可能不完善,但是基于代码是正确的这个假设,这样做既
快速又正确。
2.3 实现
准备:
对于一般情况,设 tokenBType 为字符串型(STRING_TYPE),清空 tokenB。对于正则表达式,则
设 tokenBType 为正则型(REGULAR_TYPE),不要清空 tokenB,因为之前一定读出来的正则表达式的
几个字符。对于正负数,tokenBType 仍然为字符串型,也不要清空 tokenB,正负号此时已经读出来了,
之后就正常处理就可以了。
主循环:
资源评论
蟹蛛
- 粉丝: 22
- 资源: 323
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
- multiled.zip
- 基于php实现的哈希算法的人脸检索
- 单片机 电子钟 设计报告/课程设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功