Это не совсем вопрос, потому что в данный момент я не могу сформулировать в уме точный вопрос. Это скорее набор громких голосовых мыслей, которыми я хочу поделиться с другими участниками, чтобы исправить мои сомнения.
Я пытаюсь реализовать автозаполнение для JavaScript. Не тратьте свое время, говоря мне, что невозможно иметь полный автозаполнение для не статически типизированного программирования. Я это уже знаю.
То, что я хочу, это небольшой автозаполнение, которое, если я определю что-то вроде этого:
var a = {
b: { first: "goofy",second: 5},
c: "minnie"};
if (a.b.second > 0)
a.s = 0;
else
a.t = "honey";
когда я цифру. автозаполнение должно показать мне b, c, s, t.
Я провел последний месяц, чтобы научиться разбирать вещи, используя материал, предоставленный курсом компилятора в Стэнфордском университете http://www.stanford.edu/class/cs143/.
Теперь я немного запутался. Очевидно, что если бы мне пришлось создавать компилятор, я бы использовал грамматику LALR и такие инструменты, как flex & bison. Но автозаполнение это разные вещи. Это интерактивно. Пока вы печатаете, у вас нет полного кода, и строка, которую вы набираете в одном моменте, не является допустимым предложением на языке программирования. Если я наберу. синтаксический анализатор LALR скажет, что не может сократить предложение до начала производства. Это означает, что я не могу полностью проанализировать то, что я написал до этого момента. Но в любом случае я должен разобрать предложение, чтобы показать, какие члены находятся внутри «а».
Если я хорошо понял, LALR-разбор ленивее, чем LL. LALR пытается собрать как можно больше лексем, прежде чем применять сокращение. У меня сложилось впечатление, что LALR - правильный выбор для компилятора, но LL лучше для автозаполнения (если язык программирования, который вы собираетесь анализировать, имеет грамматику LL, очевидно). Это правильно?
Извините, я знаю, что мой пост сбивает с толку, но в этот момент у меня возникло такое же замешательство, и я надеюсь, что кто-то может помочь мне разобраться с беспорядком в моем мозгу. Я ищу человека с некоторым опытом написания автозаполнения, который мог бы дать мне несколько полезных советов.