javascript - JavaScript/ECMAScript 是常规语言吗?

标签 javascript regex language-agnostic

我尝试了一些谷歌搜索,但找不到任何解决此问题的文章/之前的问题。原因是我与某人就使用输入验证拒绝可能的 XSS 发生了一个小争议。我知道 HTML 不是一种常规语言,但我不能对 javascript 提出如此有力的论点。

我检查了此链接:

http://www.dlsi.ua.es/~mlf/nnafmc/pbook/node46.html

我想出了这个:由于 html 中的标签可以无限嵌套,这就是为什么 HTML 不是常规语言的直观概念。推而广之,由于您可以使用 {} 无限嵌套 JavaScript 代码块,因此 javascript 也不是常规语言。

我希望看到更正式的演示,无论是支持还是反对这个非正式的提议。或者甚至可能讨论编程语言中的正则表达式扩展,也许使得无需编写解析器即可完成此类操作。

最佳答案

事实上,JavaScript 不是一种常规语言,这一点可以用大括号必须按照你的直觉所建议的平衡这一事实来证明。

证明语言不规则的有用工具是 Pumping Lemma 。您可以使用它来演示如果 JavaScript 是常规的,则某些序列如

function(){ function() { function(){ ... function () {

(其中{不匹配)在被某个前缀和后缀包围时可以重复任意多次,这显然与花括号必须匹配的事实相矛盾。

关于javascript - JavaScript/ECMAScript 是常规语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247030/

相关文章:

javascript - 在 Angular/Ionic 应用程序中保持标题固定在滚动条上

javascript - 从 toUTCString() 开始的日期

javascript - 密码验证正则表达式 : require and forbid certain characters

javascript - 正则表达式立即停止匹配或如果有逗号

language-agnostic - 您什么时候遇到过现场停机问题?

javascript - 如何获取ckeditor中所选文本的html源

javascript - div 之间淡入淡出

javascript - 键值对的正则表达式

design-patterns - 这种带有闭包的模式有名字吗?

language-agnostic - 什么是 "vendoring"?