Skip to main content

Qsp.FSharp.Parser

Qsp.FSharp.Parser разрабатывается для сред разработки, которые поддерживают LSP (к примеру, VS Code, для расширения которого всё это и затевалось).

Qsp.FSharp.Parser парсит вообще весь исходник сразу (чем отличается от парсера в QSPLib) и попутно собирает:

  • токены и их расположение (кажется, этим должен заниматься лексический анализатор, а не синтаксический, но там всё не так просто)
  • семантическое значение токенов
  • собирает синтаксическое дерево

Главный юмор — в том, что синтаксическое дерево для LSP сервера вообще не надо, но парсер все равно упорно его собирает, а затем откидывает. Зато оно используется для форматирования кода (которое вызывается, к примеру, из LSP сервера, т.е. всё-таки надо!) и прочих пока не задокументированных штук.

Технически ничего не мешает написать интерпретатор, на вход которого можно было бы подавать синтаксическое дерево, но пускай лучше QSPLib этим занимается, раз уж он под это дело заточен.

Qsp.FSharp.Parser старается честно следовать спецификации, но отсебятины и недочётов тоже хватает.

Написан на F#, что, с одной стороны, привязывает его к .Net платформе, а с другой стороны позволяет с помощью Fable скомпилироваться в JS и прочие языки. Было бы желание, как говорится.