我正在尝试创建一个VBScript解析器.我想知道最好的方法是什么.我研究过和研究过.最流行的方式似乎是像Gold Parser或ANTLR这样的东西.
我想实现的功能是动态检查VBScript中的语法错误.每次文本更改时,我都不想编译整个VBS.我该怎么做呢?我尝试使用Gold Parser,但我认为没有增量方法可以通过它进行解析,比如部分解析树...有关如何为这种情况实现部分解析树的任何想法?
我通过GOLD Parser实现了VBscript Parsing.但是它仍然不是部分解析器,在每次文本更改后解析整个脚本.有没有办法建立这样的东西.
THKS
我已经阅读了GOLD主页(http://www.devincook.com/goldparser/)文档,常见问题解答和维基百科,以了解GOLD可能有哪些实际应用.我正在考虑为我的系统提供一种编程语言(很容易),例如SAP上的ABAP或Axapta上的X ++ - 但它对我来说看起来不可行,至少不容易 - 即使你使用GOLD.
GOLD生成的解析结果的最终用法让我感到惊讶 - 你如何处理解析的结果?
编辑:一个实际的例子(描述)会很棒.
首次尝试编写兼容语法失败.
这是语法:
! ------------------------------------------------- Sets
{WS} = {Whitespace} - {CR} - {LF}
{ID Head} = {Letter} + [_]
{ID Tail} = {Alphanumeric} + [_]
{String Chars} = {Printable} + {HT} - ["\]
! ------------------------------------------------- Terminals
! The following defines the Whitespace terminal using the {WS}
! set - which excludes the carriage return and line feed
! characters
Whitespace = {WS}+ | {CR}{LF} | {CR} | {LF}
!NewLine = {CR}{LF} | {CR} | {LF}
MyNewLine = {CR}{LF} | …
Run Code Online (Sandbox Code Playgroud) 出于性能原因,我将C#库移植到C++.在正常操作期间,此库需要解析大约150'000个数学表达式(想想excel公式),平均长度小于150个字符.
在C#版本中,我使用GOLD解析器生成解析代码.它可以在一秒钟内解析所有150'000个表达式.
因为我们正在考虑扩展我们的语言,所以我认为转向C++可能是改为ANTLR的好机会.我已将(简单)语法移植到ANTLR并从中生成C代码.解析150'000表达式需要12秒,因为对于每个表达式,我需要创建一个新的ANTL3_INPUT_STREAM,令牌流,词法分析器和解析器 - 至少在版本3.4中,没有办法重用它们.
我很感激有人可以给我一个推荐使用的内容 - GOLD当然是一个选项,虽然生成C++或C代码似乎比C#变种复杂得多.我的语法是LALR和LL(1)兼容.最重要的是解析小输入的性能.