【问题标题】:Syntax validator语法验证器
【发布时间】:2013-11-18 18:58:03
【问题描述】:

我存储了一个文件,我正在使用 Javascript 读取它。 问题是我想模拟一个句法验证器,却得不到好的结果。

syntax.txt:

class foo {
}

问题是我无法获取课程内容。 我要做的是验证是否有类声明:

fileString.match(\^class\g);

这返回给我:["class"],但我想得到foo { } 和里面的所有东西。

这可能吗?

如果文件更改会发生什么?就像是: 语法.txt:

class foo {
}
class bar {
}

谢谢!

【问题讨论】:

  • 好吧,你的 reg exp 只寻找类部分......玩得开心,里面有打开和关闭 }。获取字符串很可能需要不止一个 reg exp。
  • 我正在尝试通过为有限自动机绘制有向图来做到这一点!

标签: javascript syntax computer-science interpreter


【解决方案1】:

出于同样的原因you can't validate HTML with regex,您将无法使用正则表达式验证编程语言。这不是常规

想象一下(伪代码):

class foo {
    function barbar() {
        if(foobar) {
            case(bar) {
                'x': ... break;
                'y':
                    if(foofoo) {
                        ...
                        return "}";
                    }
            }
        }
    }
}

您永远无法处理正则表达式中的所有场景。你需要一个真正的解析器。您可以自己编写或使用库,但绝对不能依赖正则表达式。

【讨论】:

  • 是的,确实如此,但我只想获取类内的文本
  • 你做不到。在您点击} 之前,您不能只搜索。而且您不能强制 JavaScript 正则表达式计算 {} 的实例,或处理引号,或分析语法错误的情况,例如缺少 }。正则表达式不会削减它。
  • 如果我说:该类是由“class foo []”定义的,而其他任何东西都使用“{}”?
  • 这有什么帮助?没有什么可以阻止我在 JavaScript 类中做这样的事情:var x = '{'+"{}{{}"+(function(){ return {x: true};})().x+(y.replace(/[{}]+/,"bar"));。这是一个完全有效(如果不连贯)的作业。祝你好运解析{,},[,],(,),",',/等的所有完全合法的使用。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2018-10-13
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多