静态解析:判断两个Javascript函数是否相同
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了静态解析:判断两个Javascript函数是否相同,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2331字,纯文字阅读大概需要4分钟。
内容图文
![静态解析:判断两个Javascript函数是否相同](/upload/InfoBanner/zyjiaocheng/719/506f9452b6f9446c91d5dc012d5960c2.jpg)
我正在寻找一种方法,使用两个JavaScript函数的静态分析来判断它们是否相同.让我定义“相同”的多个定义.
等级1:除了可能的不同空格之外,功能是相同的,例如, TABS,CR,LF和SPACES.
级别2函数可能具有与级别1不同的空白,但也可能具有不同的变量名称.
3级???
对于第一级,我想我可以从包含两个JS函数定义的每个字符串中删除所有(非文字,可能很难)空白,然后比较字符串.
对于第二级,我想我需要使用类似于SpiderMonkey’s parser的东西来生成两个解析树,然后编写一个比较器,它可以遍历树并允许变量具有不同的名称.
[编辑]威利汉姆,在下面说明一点.我的意思是相同的.现在,我正在寻找一些实用的策略,特别是在使用解析树方面.
解决方法:
重新编辑:
为了阐述我对确定相同功能的建议,可以建议以下流程:
级别1:删除任何不属于字符串文字的空格;在每个{,;之后插入换行符和}并比较.如果相等;功能是相同的,如果不是:
第2级:将所有不依赖于同一作用域中定义的其他变量状态的变量声明和赋值移动到它们声明的作用域的开头(或者如果不想实际解析JS;则开始括号);并按行长排序;将所有变量名称处理为4个字符长,并且在绑定长度的情况下回退到按字母顺序忽略变量名称.按字母顺序重新排序所有集合,并重命名所有变量vSNN,其中v是文字,S是嵌套大括号的数量,NN是遇到变量的顺序.
相比;如果相等,则功能相同,如果不相同:
级别3:用“sNN”替换所有字符串文字,其中“和s是文字,NN是遇到字符串的顺序.比较;如果相等,则函数是相同的,如果不是:
级别4:根据字母顺序使用具有最高优先级的函数的名称来规范化已知相同的任何函数的名称(在下面的示例中,对p_strlen()的任何调用都将替换为c_strlen().如果需要,按照级别1重新排序.比较;如果相等,则功能相同,否则;功能几乎肯定不相同.
原始答案:
我想你会发现你的意思是“相同”,而不是“相同”.
正如您所发现的那样,差异至关重要:
如果按照某种规范化方式(删除非文字空格,将变量重命名和重新排序为规范化顺序,用占位符替换字符串文字,……),则两个函数是相同的,它们与字面上相等.
如果在为任何给定输入值调用时它们给出相同的返回值,则两个函数是相同的.在一般情况下,考虑一种编程语言,它计算了零终止字符串(混合Pascal / C字符串,如果你愿意的话).函数p_strlen(str)可能会查看字符串的字符数并返回该字符串.函数c_strlen(str)可能会计算字符串中的字符数并返回该字符串.
虽然这些函数肯定不相同,但它们将是相同的:对于任何给定(有效)的输入值,它们将给出相同的值.
我的观点是:
确定两个函数是相同的(你似乎想要实现的)是一个(适度)微不足道的问题,如你所描述的那样完成.
确定两个函数是否真的相同(你可能真正想要实现的)是非平凡的;事实上,它很简单,可能与Halting Problem相关,而不是静态分析可以完成的事情.
编辑:当然,相同的功能也是一样的;但是以完全分析的高度特异性且很少有用的方式.
内容总结
以上是互联网集市为您收集整理的静态解析:判断两个Javascript函数是否相同全部内容,希望文章能够帮你解决静态解析:判断两个Javascript函数是否相同所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。