编程语言
首页 > 编程语言> > javascript-在解析期间检测内容中的正则表达式

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