在JavaScript中使用与保留关键字相同的功能的其他单词

在JavaScript中使用与保留关键字相同的功能的其他单词,javascript,node.js,compilation,Javascript,Node.js,Compilation,我正在探索语言解释器和编译器,以构建一个小型的国际编译器,该编译器只需对JavaScript(英语保留字)进行少量修改即可编译成vanilla JS 修改的JS示例: notfor(notlet i=0; i<5; i++) { ... } for(let i=0; i<5; i++) { ... } notfor(notlet i=0;i正如CertainPerformance建议的那样,我将字符串从其他代码中分离出来,这样解析器就可以简单地替换字符串之外的内容

我正在探索语言解释器和编译器,以构建一个小型的国际编译器,该编译器只需对JavaScript(英语保留字)进行少量修改即可编译成vanilla JS

修改的JS示例:

notfor(notlet i=0; i<5; i++) {
    ...
}
for(let i=0; i<5; i++) {
    ...
}

notfor(notlet i=0;i正如CertainPerformance建议的那样,我将字符串从其他代码中分离出来,这样解析器就可以简单地替换字符串之外的内容,而不用担心更改用户创建的字符串。这只是我的深夜方法,我相信有更好的方法来做,但这很好

let code = fs.readFileSync('./code.js', {encoding:'utf8', flag:'r'}).split('\n')
let compiled = ''
code.forEach(line => {
    line.split(/(?=["'`])/).forEach(analLine => {
        if (!analLine.match(/^["'`].*/)) {
            compiled += analLine.replace('notlet', 'let')
                                .replace('notfor', 'for')
        } else {
            compiled += analLine
        }
    })
    compiled += '\n'
})
console.log(compiled)
eval(compiled)

我会编写一个解析器,将字符串文本和模板文本与实际代码分离,然后使用正则表达式仅替换实际代码中的
notfor
等。这是可行的-我以前做过-但需要大量的代码和努力。大多数复杂性是由于
${}
s个模板文本。好主意,一定要试试it@CertainPerformance您是否愿意至少分享一点解析器的片段?我对包含关键字的变量名有问题。例如,“notlet anotletvar”被编译为“let aletvar”而不是“let anotletvar”,正如您所说,我在模板文本和字符串方面仍然存在问题