2017-10-20 28 views
0

Python用空格來表示塊:確實EcmaScript的任何規則,這裏的空白分析過程中是編譯器的重要

for x in range(0, 50): 
    print x 

在JavaScript中,我們使用大括號用於這一目的:

for (x in range(0, 50)) { print(x) } 

我想知道在解析程序和創建AST時,空格在EcmaScript中是否有任何意義?

我已經看過TypeScript編譯器的來源,它似乎在解析源代碼時忽略空白。

+3

*自動插入分號*是我能想到的,使得空白唯一的例子已經在JS任何意義:https://stackoverflow.com/q/2846283/4879 – pawel

+0

@pawel,我已經找到了規範中的相關部分。只有行結束符很重要。我已經添加了我自己的答案。 –

+1

當然空白是重要的:它分離令牌!你只是在談論換行和縮進嗎? – Bergi

回答

1

正如@Bergi指出的那樣,在詞法分析過程中,空格是非常重要的,它允許掃描器知道特定令牌何時結束。例如,這可以區分newObjectnew Object。對於不包含空格的作品來說很重要。例如,由於空間不能從IdentifierPart派生,所以它標記Identifier token的結尾。空白也被定義爲一個單獨的生產對所有的目標符號,從最簡單的一個InputElementDiv

InputElementDiv:: 
    WhiteSpace 

在句法分析僅線路終止子是用於自動分號插入過程重要。剩下的空格不相關。下面是引用from the spec

此外,行終止符,雖然不被認爲是代幣,還 成爲輸入元素流的一部分,並且引導 自動分號插入(11.9)的過程。簡單的空格和 單行註釋將被丟棄,並且不會出現在語法語法的輸入元素流 中。

相關問題