Частичный синтаксический анализатор VBScript

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

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

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

спасибо


person redDragonzz    schedule 04.03.2011    source источник
comment
Почему вы возражаете против повторного анализа всего этого? Скрипты VBScript, как правило, не очень большие.   -  person Ira Baxter    schedule 05.03.2011
comment
Хм... в соответствии с cs.vu.nl/~dick/PTAPG.html частичные синтаксические анализаторы возможны, и я искал способ создать их. Простите меня, если я покажусь нубом. Я никогда раньше не работал над созданием парсера..   -  person redDragonzz    schedule 05.03.2011
comment
Можно создавать частичные или инкрементные парсеры. Это значительно сложнее, чем создание парсера для полной грамматики. Так что, если он вам не нужен, вы должны его пропустить. Для небольших документов VBScript вы можете просто применить к строке полный синтаксический анализатор, чтобы проверить, все ли в порядке. Если у вас большие программы, то, возможно, это будет иметь значение.   -  person Ira Baxter    schedule 05.03.2011


Ответы (2)


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

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

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

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

person Ira Baxter    schedule 05.03.2011
comment
Хорошо, я попробую сделать так, а как насчет ANTLR? Я думаю, что у него есть возможность частично строить абстрактные синтаксические деревья. - person redDragonzz; 07.03.2011
comment
@redDragonz: я недостаточно знаю об ANTLR. Что я могу вам сказать, так это то, что генераторы синтаксических анализаторов, используемые в основном для синтаксического анализа всей программы (целевые правила для грамматики), в значительной степени не обеспечивают значимого способа выполнения инкрементного синтаксического анализа. Учитывая, что ANTLR относится к этой категории, я был бы удивлен, если бы он предоставил такую ​​дополнительную поддержку. Ваш пробег может отличаться. - person Ira Baxter; 07.03.2011

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

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

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

Удачи!

person Bart Kiers    schedule 04.03.2011
comment
Gold Parser позволяет анализировать VBScript devincook.com/goldparser/engine. /dot-net/morozov/index.htm, и я реализовал синтаксический анализатор на его основе и среду выполнения C#, написанную Морозовым. Итак, как мне создать частичный парсер :) - person redDragonzz; 04.03.2011
comment
@redDragonzz, тогда вам следует обновить исходный вопрос, указав эту информацию. - person Bart Kiers; 04.03.2011