這不完全是一個問題,因爲在這一刻,我無法在腦海安排一個精確的問題。它更多的是我想與其他成員分享的一些大聲的想法,以解決我的疑惑。 我正在嘗試爲JavaScript實現一個自動完成器。不要浪費你的時間對我說,這是不可能有一個完全autocompleter非靜態類型的編程languate。我已經知道了。 我要的是一個小autocompleter,如果我定義了這樣的事情:如何爲編程語言實現自動完成器
var a = {
b: { first: "goofy",second: 5},
c: "minnie"};
if (a.b.second > 0)
a.s = 0;
else
a.t = "honey";
,當我一個數字。 autocompleter應該給我看b,c,s,t。 我花了上個月學習如何使用編譯器課程提供的材料在斯坦福大學http://www.stanford.edu/class/cs143/解析事情。 現在我有點困惑。很明顯,如果我必須創建一個編譯器,我會使用LALR語法和工具,如flex & bison。但autocompleter這是一個不同的東西。它是互動的。在你輸入的時候,你還沒有完整的代碼,並且你在一個單元中輸入的行不是編程語言中的有效參數。如果我輸入一個。一個LALR解析器會說,不能將句子減少到開始生產。這意味着,直到現在,我還沒有完全能夠解析我所寫的內容。但無論如何,我必須解析句子才能顯示「a」內的成員。 如果我很好理解LALR解析比LL更加懶惰。 LALR試圖在應用減少之前收集儘可能多的詞位。所以我的印象是LALR是編譯器的正確選擇,但LL對於自動完成器來說更好(如果您要解析的編程語言顯然是LL語法的話)。這是對的嗎? 對不起,我知道我的帖子很混亂,但在這一刻,我腦海中也有同樣的困惑,我希望有人能幫助我清理我腦海中的混亂。我正在尋找一些具有寫autocompleter經驗的人,可以給我一些小的和有用的提示。