Compilation 无效的左侧赋值是编译错误还是编译中的计算错误

Compilation 无效的左侧赋值是编译错误还是编译中的计算错误,compilation,Compilation,我正在写一个编译器 以JavaScript为例 如果我写下 function foo (){return “bar”} foo() = 1; 我会得到一个虚拟机错误 显然,foo会返回一个字符串,该字符串也不能被赋值,并且会返回一个错误 但这是一个解析错误吗?或者这是一个评估错误 错误捕获在哪里处理 这应该在ast构建期间还是在运行时捕获 这是特定语言吗?关于tbis的一般做法是什么?我用perl做了一些测试。我 $ perl -c sub foo () {return 'bar'} my

我正在写一个编译器

以JavaScript为例

如果我写下

function foo (){return “bar”} 
foo() = 1;
我会得到一个虚拟机错误

显然,foo会返回一个字符串,该字符串也不能被赋值,并且会返回一个错误

但这是一个解析错误吗?或者这是一个评估错误

错误捕获在哪里处理

这应该在ast构建期间还是在运行时捕获


这是特定语言吗?关于tbis的一般做法是什么?我用perl做了一些测试。我

$ perl -c
sub foo () {return 'bar'}
my $bar = \&foo;
$bar->() = 'test';

- syntax OK
而不是执行它

 $ perl
sub foo () {return 'bar'}
my $bar = \&foo;
$bar->() = 'test';
Can't modify non-lvalue subroutine call of &main::foo at - line 3.
所以看起来,是的,这是一个运行时错误。意思是在构建解析树时不要担心它

在C语言中可能不是这样,但在解释的语言中,似乎至少如果它的语法正确,而不是非常不正确,那么它可以编译