javascript-在解析期间检测内容中的正则表达式
作者:互联网
我正在为C写一个简单的解析器.我只是与其他一些语言文件一起运行(为了好玩-看看C相似和懒惰的程度-如果我可以避免的话,不想为每种语言分别编写单独的解析器).
但是,如果要解析的代码包含正则表达式,则解析器似乎无法解析JavaScript.
情况1:
例如,在解析JavaScript代码段时,
var phone="(304)434-5454"
phone=phone.replace(/[\(\)-]/g, "")
//Returns "3044345454" (removes "(", ")", and "-")
‘(‘,'[‘等)作为新作用域的启动器进行匹配,这些作用域可能永远不会关闭.
情况2:
而且,对于Perl代码段,
# Replace backslashes with two forward slashes
# Any character can be used to delimit the regex
$FILE_PATH =~ s@\\@//@g;
//被匹配为注释…
如何在“类似C的”程序文件的内容文本中检测到正则表达式?
解决方法:
是不可能的.
以这个为例:
m =~ s/a/b/g;
可以是C或Perl.
一分钟的思考揭示出,Perl样式正则表达式(也是严格意义上的C表达式)的数量是无限的.
另一个例子:
m+foo *bar[index]+i
您可以获得的最好结果是一些极端模糊的猜测.困难源于这样一个事实,即正则表达式是几乎可以包含所有字符的字符序列.
您最好清理错误处理.如果缺少某些括号或看到多余的括号,则解析器不应“分解”.
标签:language-agnostic,javascript,parsing,c-4,perl 来源: https://codeday.me/bug/20191024/1917588.html