现在我已经完成了一些基本的语法验证,但我坚持进行变量验证.
我知道JSLint使用Javascript做到这一点,我想知道是否有人知道这样做的好方法.
例如,假设用户编写了代码
moose = "barry" base = 0 if(moose == "barry"){base += 100}
然后我试图找到一种方法来澄清“if”表达式是否使用正确的语法,如果变量moose已经初始化等等
但我想这样做而不逐个字符扫描,
代码是专为此应用程序构建的迷你语言,因此非常基本,不需要管理内存或类似的东西.
我曾想过先用Carriage Return然后用Space来分割,但是没有什么可说的,用户不会写像moose =“barry”或者是(moose ==“barry”)
并且没有什么可说的用户不会保持条件内联的结果.
很明显,编译器和口译员在更广泛的范围内这样做,但我不确定他们是否确实按性别进行了操作,如果他们确实如何优化呢?
(其他选项是我可以将它发送回PHP进行处理,然后重新启动浏览器的责任)
有什么建议?
谢谢
用例是有限的,在这种情况下语法永远不会扩展,语言是一种简单的脚本语言,使客户能够根据用户输入创建唯一的成本,最终结果将由PHP处理,无论如何都要保证计算最终用户无法调整并确保一致性.
例如,假设基本成本为1.00英镑
并且在表单上有一个名为“附加成本”的字段,该语言将允许他们操纵相对于“附加成本”字段的基本成本.
所以
base = 1; if(additional > 100 && additional < 150){base += 50} elseif(additional == 150){base *= 150} else{base += additional;}
这是如何使用该语言的基本示例.
谢谢你的所有答案,
我已经研究过一个解析器,创建一个解析器会比需要的复杂得多
用1000行代码运行了多次测试,发现即使在具有512mb内存的单核P4上也只需几秒钟即可处理(远远少于客户使用)
我决定构建一个基于PHP的语法检查器,它将检查信息并将变量等转换为有效的PHP代码,同时它正在检查它(以便以后可以调用它而无需重新编译)使用此代替javascript这似乎更合适并且可以在不妨碍验证过程的情况下产生更复杂的代码
它只需要一个小时,我有能够检查if语句的有效性的代码,并且不会被嵌套的if,space或奇怪的表达式混淆,只有很少的东西需要检查,而解析器和完整的脚本语言会花更长的时间
你们都给了我很多思考,并且我已经给出了相关答案,谢谢
解决方法
如果您编写了一个“编程语言”,可以在应用程序中启用某些脚本,那么无论您认为它是多么微不足道,最终都会有人编写一个令人震惊的大型程序.
我不知道任何可用的生成JavaScript解析器的解析器生成器.递归下降解析器并不难写,但是它们可能难以维护,并且它们使得扩展语法变得有点困难(特别是如果你没有经验丰富的原始版本).