【发布时间】:2020-11-03 22:16:15
【问题描述】:
我正在探索语言解释器和编译器,以构建一个小型国际编译器,该编译器将 JavaScript (对英文保留字)稍作修改即可编译为 vanilla JS。
修改后的 JS 示例:
notfor(notlet i=0; i<5; i++) {
...
}
*显然“notfor”和“notlet”不会是真正的关键字
原版 JS 编译:
for(let i=0; i<5; i++) {
...
}
我尝试过 RegEx 方法,但我不断发现 RegEx 失败的边缘情况。
Ex. /notfor(.*)/,当 notfor(..){..} 放在字符串中或在初始化、条件或最终的任何部分有右括号时,此操作将失败-for 语句的表达式。
解决这个问题的另一种简单方法是什么?
【问题讨论】:
-
我会编写一个解析器,将字符串文字和模板文字与实际代码分开,然后使用正则表达式仅替换实际代码中的
notfor等。这是可行的——我以前做过——但它需要大量的代码和努力。大部分的复杂性是由于模板文字的${}s。 -
好主意,一定要试试
-
@CertainPerformance 您愿意分享您的解析器的至少一点 sn-p 吗?我在使用包含关键字的变量名时遇到问题。前任。 “notlet anotletvar”被编译为“let aletvar”而不是“let anotletvar”,正如你所说,我仍然遇到模板文字和字符串的问题
标签: javascript node.js compilation