javacc之路5---词法分析器技巧
创始人
2024-02-17 02:26:51
0

为语法编写词法规范的方法有很多种,但生成的令牌管理器的性能可能会因您的操作方式而有很大差异。

本节介绍了一些编写良好的词法规范的技巧。

内容
字符串文字
尽可能使用字符串字面量
避免使用相同标记的字符串文字
按长度排序字符串文字
词汇状态
尽量减少词汇状态的使用
尽可能使用 SKIP
避免将 SKIP 与词法操作和状态更改一起使用
尽可能避免使用 MORE
其他
单独使用 ~[]
避免选择性地使用 IGNORE_CASE
字符串文字
尽可能使用字符串字面量
尝试指定尽可能多的字符串文字。

这些由确定性有限自动机 (DFA) 识别,它比识别其他类型的复杂正则表达式所需的非确定性有限自动机 (NFA) 快得多。

例如,要跳过空白/制表符/新行:

SKIP : { " " | “\t” | “\n” }
比这样做更有效率:

SKIP : { < ([" ", “\t”, “\n”])+ > }
因为在第一种情况下你只有String文字,所以它会生成一个 DFA,而对于第二种情况它会生成一个 NFA。

避免使用相同标记的字符串文字
尽量避免为同一标记选择多个字符串文字。

例如:

< NONE : ““none”” | “‘none’” >
相反,为此有两种不同的令牌类型,并使用非终端,这是这些选择之间的选择。

上面的例子可以写成:

< NONE1 : ““none”” >
|
< NONE2 : “‘none’” >
并定义一个非终端称为None():

void None() : {}
{
|
}
这将使识别速度更快。请注意,如果选择是在两个复杂的正则表达式之间进行,那么可以选择。

按长度排序字符串文字
按长度增加的顺序指定所有字符串文字,即所有较短的字符串文字在较长的字符串文字之前。

这将有助于优化字符串文字所需的位向量。

词汇状态
尽量减少词汇状态的使用
尽量减少词汇状态的使用。

使用它们时,尝试将所有复杂的正则表达式移动到一个词法状态,让其他人只识别简单的字符串文字。

尽可能使用 SKIP
SKIP如果您不关心某些模式,请尽可能多地尝试。

在这里,你必须小心一点EOF。看到EOFafterSKIP很好,而看到EOFafter aMORE是词法错误。

避免将 SKIP 与词法操作和状态更改一起使用
尽量避免词法动作和词法状态随SKIP规范而变化,尤其是对于单个字符SKIP,如 , \t , \n 等)。

对于这种情况,会生成一个简单的循环来吃掉SKIP’ed 单个字符。因此,如果有与此相关的词汇动作或状态更改,则不可能以这种方式进行。

尽可能避免使用 MORE
尽量避免用MORE规范指定词法动作。

一般来说,每个人都MORE应该以 a TOKEN(or SPECIAL_TOKEN) finally 结尾,这样你就可以在该TOKEN级别执行操作,如果可能的话。

其他
~[]自己使用
尽量单独使用模式~[]。

例如,做

MORE : { < ~[] > }
比做更好

TOKEN : { < (~[])+ > }
当然,如果你的语法规定其中之一不能使用,那么你别无选择,只能尽量使用< ~[] >。

避免选择性地使用 IGNORE_CASE
IGNORE_CASE为某些正则表达式设置而不为处于相同词法状态的其他正则表达式设置会有严重的性能损失。

最佳做法是IGNORE_CASE在语法级别设置选项。如果那不可能,则尝试为词法状态中的所有正则表达式设置它。

相关内容

热门资讯

“五一”假期广东跨区域人员流动... 中新网广州5月6日电 (记者 蔡敏婕)记者6日从广东省交通运输厅获悉,“五一”假期期间(5月1日至5...
《中国纪检监察报》关注海口织密... 转自:海口发布5月5日中国纪检监察报发布文章《海南海口织密“监督一张网”推动数据共享问题共治》关注海...
长信科技(300088.SZ)... 长信科技(300088.SZ)发布公告,基于对智能算力服务及相关业务领域发展前景的看好,公司拟与算力...
串口调试助手使用方法简介 下载并打开串口助手,完成参数设置后,即可收发数据进行调试,以下是具体步骤:1、 网上有多种串口助手,...
夜读|活成自己喜欢的样子 心中若有桃花源,何处不是云水间。孤独是生命的留白人生路上,总会有一些路途特别难走,而且过程中会觉得孤...
六大车企一季报:比亚迪近92亿... 多家上市车企2025年第一季度业绩出炉。整体来看,被统计的6家主流车企业绩明显分化,新能源车表现更加...
“五一”假期陕西热门景区大盘点... “五一”假期期间,陕西文旅市场“热”力十足,全省各地以创新服务和多维升级举措,为全国各地的游客打造了...
刘建超:是哪个国家的公民,就应...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 2024年3月27日...
远大医药:全球创新药STC31... 转自:中国证券报·中证网  中证报中证网讯(记者 康曦)远大医药5月6日晚公告称,公司自主开发的全球...
痛心!江西人高武勇救儿童牺牲,... 5月1日,江西籍退役军人高武不顾个人安危,跳入水中救起落水儿童,却不幸牺牲,生命永远定格在42岁。高...
今天宣告死亡:全球最大语音通信... 今天,微软正式关停Skype。曾经的全球最大语音通信软件,宣告死亡。Skype是如何崛起的?其兴衰又...
星空夜话|身体的这些“求救信号... 转自:全国妇联女性之声长期伏案、手机依赖、不良坐姿……颈椎病如今高发于职场,且呈年轻化趋势。颈椎病不...
美国3月贸易逆差创纪录水平!金... 每经编辑 黄胜     由于在特朗普政府准备全面征收关税的情况下企业急于进口,美国...
跨境游“五一”双向火热 “友好... 中新网北京5月6日电(记者 吴涛)刚刚过去的“五一”假期,跨境游正转化为实际的跨境消费活力。据文化和...
珠江委滚动会商部署流域水旱灾害... 中新网广州5月6日电 (记者 王坚)水利部珠江水利委员会(下称“珠江委”)6日消息,受强降雨影响,珠...
德尔未来已回购2398.6万股... 德尔未来科技控股集团股份有限公司(以下简称“德尔未来”)于2024年10月14日召开第五届董事会第二...
5月7日A股投资避雷针︱老百姓... 中电港股东中电坤润基金和中电发展基金拟减持合计不超3%股份;广博股份董事任杭中拟减持不超1.97%股...
太力科技(301595.SZ)... 太力科技(301595.SZ)发布公告,发行人和保荐人(主承销商)根据初步询价结果,综合考虑投资者报...
1批次羽绒被、2批次蚕丝被抽检... 转自:贝壳财经新京报讯(记者张洁)5月6日,新京报记者从上海市市场监督管理局官网获悉,近期,上海市市...
康希通信终止筹划重大资产重组 ... 康希通信筹划超过半年的重大资产重组宣告终止。5月6日晚,康希通信(688653)公告,终止筹划重大资...