本发明是一种关于计算机语言词法解析的工具,特别是在提升数据处理效率方面的以及在改善代码执行效率方面的工具。
背景技术:
编译器主要由三个部分组成,前端,中间和后端。而前端是由词法解析器和语法解析器组成,现有的词法解析器灵活性不够,扩展性不强。主要体现在现有词法分析器只针对特定格式或规则的代码进行解析,只能满足一些基本的词法规则需求,面对现在计算机语言种类繁多的现状,现有的词法解析器已经无法处理各种计算机语言之间的交流问题了。
技术实现要素:
本发明主要提供一种不同计算机语言代码之间的转译工具。目前计算机语言种类繁多,各种语言之间的互通性极差,本发明可以解析目前所有主流计算机语言词法,并将解析之后的token进行特定格式化的输出。工具读取输入的源代码程序,逐步分析源代码字符串,将符合词法规则的字符切割为带标记的词法单元,然后将这些词法单元存入一个集合,最后格式化输出。本发明的词法规则支持目前所有主流的计算机语言,能解决这些语言之间的转译和相关程序上的兼容问题。
发明内容具体实施方式详细描述:
启动工具,输入一段代码或者一个包含代码的文件,代码的语言类型可以是任意的,包括但不限于目前主流的计算机语言。经过工具解析处理,包括如下步骤:
步骤一,工具读取源语言代码,将源代码视为字符串s作为输入源,创建集合list用于存放结果,循环遍历源代码,在循环中开始切割字源代码字符串;
步骤二,切割字符串需要两个参数,源字符串s和开始位置beign,切割完返回一个token,token是一个包含value,type,errorcode属性的记号实体类,其中value是string类型,type是枚举类型,errorcode是int类型;
具体切割方法如下:
1.对第一个字符进行判断,如果第一个字符属于[0-9a-za-z_]和unicode字符128-65535区间内,则继续读入下一个,直至读到不属于这个区间内的字符,记录下本次读入字符的个数作为一个长度len,源字符串s将从开始位置begin截取长度为len的子串作为token的value,返回token作为切割结果;
2.如果第一个字符不属于[0-9a-za-z_]和unicode字符128-65535区间内,则从源字符串s开始位置begin截取长度为1的子串作为token的value,返回token作为切割结果;
步骤三,对返回的token进行分析处理,处理过程如下:
1.判断token的value.length是否大于1,如果token的value.length大于1,则token的type将是是系统保留字(syskeep)、变量名称(variable)、纯数字(number)或者小数(decimal)中的一种;
2.如果token的value.length等于1,则预读源字符串begin位置的下一个字符,由预读的下一个字符来决定返回的token的value以及type,例如,本次返回的token的value为“+”,如果预读的下一个字符为‘+’或者‘=’,则修改这个token的value为“++”或者“+=”,跳出判断。再如返回的token的value为“"”,则在源字符串从token的开始位置往后查找‘"’,如果查到,则修改token的value为源字符串两个‘"’之间的子串并跳出判断,如果没有查到,则修改token的errorcode并返回。token的value.length为1的情况较多,在此不在敖述。
步骤四,将分析处理之后的token放入list集合,并给token对象设置指针属性方便后续使用,同时修改开始位置,begin=begin+token.value.length,循环步骤二至步骤四,直至读取到源字符串末尾结束循环;
步骤五,返回list结果集合,后端输出模块对结果集进行循环遍历,输出token的value,检查token中的errorcode,如果果有errorcode,则进行报错处理,否则直至循环结束,本次解析成功。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。