Частичный парсер VBScript - PullRequest
6 голосов
/ 04 марта 2011

Я пытаюсь создать парсер VBScript. Мне было интересно, как лучше это сделать. Я исследовал и исследовал. Кажется, самый популярный способ - использовать Gold Parser или ANTLR.

Функция, которую я хочу реализовать, заключается в динамической проверке синтаксических ошибок в VBScript. Я не хочу компилировать весь VBS каждый раз, когда некоторые текстовые изменения. Как мне это сделать? Я пытался использовать Gold Parser, но я предполагаю, что нет никакого инкрементального способа его анализа, что-то вроде частичных деревьев разбора ... Есть идеи о том, как реализовать частичное дерево разбора для такого сценария?

Я реализовал синтаксический анализ VBscript через GOLD Parser. Однако это все еще не частичный синтаксический анализатор, анализирует весь скрипт после каждого изменения текста. Есть ли способ построить такую ​​вещь.

Thks

Ответы [ 2 ]

4 голосов
/ 05 марта 2011

Если вы действительно хотите выполнять инкрементальный анализ, рассмотрите эту статью Тима Вагнера.

Это блестящая схема, позволяющая сохранить существующие деревья разбора, перетасовывать смеси фрагментов строк в точках редактирования и разбирать деревья, представляющие части исходного текста, которые не изменились, и реинтегрировать строки в наборразбора деревьев.Это делается с использованием инкрементного синтаксического анализатора GLR.

Это нелегко реализовать;Я сделал только часть GLR и никогда не доходил до добавочной части.Часть GLR стоила того.

Есть много статей об инкрементном разборе.Это один из действительно хороших.

2 голосов
/ 04 марта 2011

Я бы сначала искал существующий синтаксический анализатор VBScript, а не писал свой собственный, что не является тривиальной задачей!

На этой странице есть грамматика VBScript в формате BNF: http://rosettacode.org/wiki/BNF_Grammar, которую вы можете перевести в грамматику ANTLR (или некоторого другого генератора синтаксического анализатора).

Прежде чем пытаться делать такие причудливые вещи, как повторный анализ только части исходного кода, я рекомендую сначала создать парсер, который действительно работает.

Удачи!

...