我正在为客户构建一个解决方案,允许他们创建非常基本的代码,现在我已经完成了一些基本的语法验证,但我被困在变量验证上。
我知道 JSLint 使用 Javascript 来做到这一点,我想知道是否有人知道这样做的好方法。
因此,例如说用户编写了代码
moose = "barry"
base = 0
if(moose == "barry"){base += 100}
然后我试图找到一种方法来澄清“if”表达式的语法是否正确,如果变量 moose 已被初始化等,但我想在不逐字符扫描的情况下执行此操作,代码是一种迷你语言专为这个应用程序构建,所以非常基础,不需要管理内存或类似的东西。
我曾考虑过先按回车然后按空格进行拆分,但没有什么可以说用户不会写类似moose="barry"
or的东西if(moose=="barry")
,也没有什么可以说用户不会保持内联条件的结果。
显然,编译器和解释器在更广泛的范围内执行此操作,但我不确定他们是否逐个字符地执行此操作,以及他们是否进行了优化?
(另一种选择是我可以将其发送回 PHP 进行处理,然后让浏览器承担责任)
有什么建议么?
谢谢
用例有限,在这种情况下永远不会扩展语法,语言是一种简单的脚本语言,使客户端能够根据用户输入创建唯一的成本,最终结果将由 PHP 处理,以确保计算最终用户无法调整并确保有一定的一致性。
例如,假设基本成本为 1.00 英镑,并且表单上有一个名为“附加成本”的字段,该语言将允许他们相对于“附加成本”字段操纵基本成本。
所以
base = 1;
if(additional > 100 && additional < 150){base += 50}
elseif(additional == 150){base *= 150}
else{base += additional;}
这是如何使用该语言的一个基本示例。
感谢您的所有回答,我已经调查了一个解析器,创建一个解析器将比使用 1000 行代码运行多个测试所需的复杂得多,并且发现一个字符一个字符的处理即使在单核 P4 512mb 内存(远小于客户使用)
我决定构建一个基于 PHP 的语法检查器,它将检查信息并将变量等转换为有效的 PHP 代码,同时它正在检查它(以便稍后可以在不重新编译的情况下调用它)使用 this 而不是 javascript 这似乎更合适并且将允许出现更复杂的代码而不妨碍验证过程
只花了一个小时,我的代码能够检查 if 语句的有效性,并且不会被嵌套的 if、空格或奇数表达式混淆,几乎没有什么需要检查的,而解析器和成熟的脚本语言会花费更长的时间
你们都给了我很多思考,我已经对相关答案进行了评分,谢谢