javascript - 将 VisualBasic 表达式动态转换为 JavaScript 表达式

标签 javascript json vb6

我想将以 VisualBasic 风格编写的表达式(条件)转换为 JavaScript 代码。因为我还没有找到一个库可以做到这一点,所以我必须自己做。或者有人知道我可以使用的项目吗?

我的要求: 我从文件中获取一个字符串,其中包含用 VB 编写的表达式。它不是完整的 VB 代码,而只是单个 VB 函数,例如 IFTRIMLEFT 等以及一些其他函数,例如 >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";
    }
}

以下是我目前正在使用的方法,我不确定它是否能让我实现我的目标:

  1. 搜索引号中的区域,并将位置信息(开始和结束)存储在 json 对象 (jsonQuotes) 中。
  2. 搜索括号中的范围并将位置(开始和结束)保存在 json 对象 (jsonBrackets) 中。在这里,我将根据 jsonQuotes 排除引号中的范围。
  3. 搜索不在引号中的关键字(函数名称),并将找到的关键字添加到 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/

相关文章:

javascript - 使用 AngularJS 从输入中剪切特定值后的字符串

javascript - jQuery 中的 Canvas 对象,可能吗?

javascript - 无法更改输入的内容可编辑和值?

java - 如何在不同的地方对同一个 Java 枚举使用不同的 Jackson JsonSerializers?

json - 无法获取路径 Swift Playground 错误的沙箱扩展

winapi - 允许在列表框中垂直滚动,当它被禁用时(VB6)

javascript - 仅在 blogger/blogspot 的标签搜索页面上显示小部件

javascript - 带有自定义 header 的 XmlHttpRequest : Response for preflight doesn't pass access control check

.net - 丢失的 VB6 源代码;是否可以覆盖另一个对象中的方法?

vb6 - CreateFile 返回负句柄