2014-08-31 30 views
1

我寫類似的JavaScript其分號插入前語言解析器:匹配換行符只在特定條件下

var x = 1 + 2; 
x; 

var x = 1 + 2 

x 

甚至

var x = 1 + 
2 
x 

是相同。

現在,我的詞法分析器僅在與分號不同的令牌出現後才匹配換行符(\ n)。這對1和2這樣的基本情況起到很好的作用,但我如何處理第三種情況?即在表達中間發生的新行。我無法每次都匹配新行,因爲它會污染我的解析器(無處不在用新行標記插入備選項),而且我也無法匹配它們,因爲它是語句終止符。基本上,如果在那裏有一個新的行字符或分號,我會在解析語句結束時以某種方式進行檢查。

+0

JavaScript的ASI僅在遇到語法錯誤時插入分號,這與使用可選分號不同。在解析器中處理這個可能會更好,並將行結束符視爲重要的令牌。 – 2014-08-31 11:34:49

+0

但我的解析器規則添加將如下所示: ' addition :expr PLUS expr | expr NEWLINE PLUS EXPR ...' 所以這是一個不行。我錯過了什麼嗎? – 2014-08-31 17:06:14

回答

0

這一段時間沒有答案。我看不出爲什麼你不能發表聲明來分隔換行**或分號。像這樣的位:

whitespace [ \t]+ 
%% 
{whitespace} /* Skip */ 
;[\n]*  return(SEMICOLON); 
[\n]+   return(SEMICOLON); 

那麼你的語法是不是搞砸所有的,因爲你只有在語法分號。