VBScript Partial Parser

£可爱£侵袭症+ 提交于 2019-12-06 00:36:45

问题


I am trying to create a VBScript parser. I was wondering what is the best way to go about it. I have researched and researched. The most popular way seems to be going for something like Gold Parser or ANTLR.

The feature I want to implement is to do dynamic checking of Syntax Errors in VBScript. I do not want to compile the entire VBS every time some text changes. How do I go about doing that? I tried to use Gold Parser, but i assume there is no incremental way of doing parsing through it, something like partial parse trees...Any ideas on how to implement a partial parse tree for such a scenario?

I have implemented VBscript Parsing via GOLD Parser. However it is still not a partial parser, parses the entire script after every text change. Is there a way to build such a thing.

thks


回答1:


If you really want to do incremental parsing, consider this paper by Tim Wagner.

It is brilliant scheme to keep existing parse trees around, shuffling mixtures of string fragments at the points of editing and parse trees representing the parts of the source text that hasn't changed, and reintegrating the strings into the set of parse trees. It is done using an incremental GLR parser.

It isn't easy to implement; I did just the GLR part and never got around to the incremental part. The GLR part was well worth the trouble.

There are lots of papers on incremental parsing. This is one of the really good ones.




回答2:


I'd first look for an existing VBScript parser instead of writing your own, which is not a trivial task!

Theres a VBScript grammar in BNF format on this page: http://rosettacode.org/wiki/BNF_Grammar which you can translate into a ANTLR (or some other parser generator) grammar.

Before trying to do fancy things like re-parsing only a part of the source, I recommend you first create a parser that actually works.

Best of luck!



来源:https://stackoverflow.com/questions/5192774/vbscript-partial-parser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!