我想将以 VisualBasic 风格编写的表达式(条件)转换为 JavaScript 代码。因为我还没有找到一个库可以做到这一点,所以我必须自己做。或者有人知道我可以使用的项目吗?
我的要求:
我从文件中获取一个字符串,其中包含用 VB 编写的表达式。它不是完整的 VB 代码,而只是单个 VB 函数,例如 IF
、TRIM
、LEFT
等以及一些其他函数,例如 >RECORD_NR()
(我认为这不是 vb 的 native 函数)。
我现在想将此字符串转换为 JavaScript(也可以作为字符串出现,因为我随后将 JavaScript 代码写入文件中)。
问题之一是引号中的所有字符都不能按功能进行处理。
表达式示例:
IF(RECORD_NR() = 1, "NR,1",IF(RECORD_NR() = 2, "NR,2", "NR3"))
可能的结果:
var result = "";
if(record.index == 1){
result = "NR,1";
} else {
if(record.index == 2){
result = "NR,2";
} else {
result = "NR3";
}
}
以下是我目前正在使用的方法,我不确定它是否能让我实现我的目标:
- 搜索引号中的区域,并将位置信息(开始和结束)存储在 json 对象 (
jsonQuotes
) 中。 - 搜索括号中的范围并将位置(开始和结束)保存在 json 对象 (
jsonBrackets
) 中。在这里,我将根据jsonQuotes
排除引号中的范围。 - 搜索不在引号中的关键字(函数名称),并将找到的关键字添加到 json 对象
jsonBrackets
(这样我就知道哪个函数属于括号区域)。
此时我有以下 json 对象:
[
{
"ID": 1,
"start": 2,
"end": 60,
"fnc": "IF"
},
{
"ID": 2,
"start": 12,
"end": 13,
"fnc": "RECORD_NR"
},
{
"ID": 3,
"start": 29,
"end": 59,
"fnc": "IF"
},
{
"ID": 4,
"start": 39,
"end": 40,
"fnc": "RECORD_NR"
}
]
现在我正在挣扎。我想对 json 对象进行排序或将其嵌套:
[
{
"ID": 1,
"start": 2,
"end": 60,
"fnc": "IF",
"contains":[
{
"ID": 2,
"start": 12,
"end": 13,
"fnc": "RECORD_NR",
"contains":[]
},
{
"ID": 3,
"start": 29,
"end": 59,
"fnc": "IF",
"contains":[
{
"ID": 4,
"start": 39,
"end": 40,
"fnc": "RECORD_NR",
"contains":[]
}
]
}
]
}
]
有人可以帮助我实现这一目标,或者更好的是有人知道更好的方法来获得所需的结果(也许是不同的、更好的方法)?
最佳答案
根据需要处理的任务,你所需要的只是一个编译器。 需要先将vb程序转换为ast,然后遍历ast,将ast转换为js代码,就像babel一样。 以下链接是 an example 另外,这里有一个可以使用的第三方库。 https://github.com/zaach/jison
或者用hacky的方式,所有函数返回一个对象属性,该属性设置一个setter,赋值时将值赋给指定字段,最后由一个名为IF的js函数来处理各个参数值。
关于javascript - 将 VisualBasic 表达式动态转换为 JavaScript 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70589674/