ECMA-262に基づいて JavaScript パーサーを作成しています。ECMA-357と互換性を持たせるには、どれだけ変更する必要があるか知りたいです。
構文上の違いはありますか?
多くの構文拡張があります。最も重要なものは XML リテラルです (セクション 11.1.4 および 11.1.5 を参照)。
var foo = <xml>
foo
</xml>;
var bar = <>
<tag attr={(1+2).toFixed(2)}/>
{foo}
</>;
上記の例は、空のルート タグと XML コード内の JavaScript 式の特殊なケースを示しています。
ECMA-262 では有効でない式もいくつかあります (セクション 11.2 を参照)。
xml.@attr // get attribute attr
xml.* // get all child elements
xml.@* // get all attributes
xml..foo // get all <foo> tags
xml..foo.(@id == 1) // filter <foo> tags by id attribute
名前空間があります (セクション 11.1.2 を参照):
xml.soap::foo // get <foo> child tags with namespace soap
xml.@soap::attr // get attribute with namespace soap
構文的に非常に珍しい構造であるデフォルトの XML 名前空間ステートメントがあります (セクション 12.1 を参照)。
default xml namespace = new Namespace("http://foo/bar");
最後に、次のfor each .. in
ようなループがありますfor .. in
(セクション 12.3 を参照)。
for each (var foo in xml)
{
}
私の知る限り、これらはすべて構文上の違いです。