支持优先规则的标记器和分析器包





5.00/5 (4投票s)
2001年6月14日
3分钟阅读

189538

2835
一个库,
- 下载演示项目 - 222 Kb
- 仅下载源代码 - 163 Kb
- 下载 IDE 可执行文件 - 527 Kb (包含示例语法 + 自述文件)
引言
这个库源于我目前正在进行的一些研究项目。所有源代码都受 LGPL 保护 - 这意味着您可以自由地在任何项目(商业或非商业)中使用该代码。
工作原理
词法分析器使用分层映射结构来存储令牌,并且应该与优秀的 lexx 一样快(至少 n*O(lexx) :-))。 如果正确使用,分析器没有 LALR(1) 分析器的限制,具有一些缓存功能,并且允许解析文字令牌。 它还支持优先级优先的规则集。
所有项目都大量使用 STL。 因为 MSVC6 附带的 STL 实现不是最佳选择,所以您应该从 www.stlport.org 免费下载 STL Port 4.5.1 实现。 我现在已经设法摆脱了大部分 C4786 警告(提示:切换 /FI)。
如何设置分析器/词法分析器
一个简单表达式求值器的典型规则定义如下所示
std::tstringstream init( "[seperators]\n" "200:+\n" "201:-\n" "202:*\n" "203:/\n" "204:^\n" "205:;\n" "206:(\n" "207:)\n" "' Whitespace tokens:\n" "0: \n" "0:\t\n" "0:\\n\n" "0:\\r\n" "[rules]\n" "300:numbers\n" "[grammar]\n" "401:{.expr}=100:{.expr}{$+}{.expr}\n" "402:{.expr}=100:{.expr}{$-}{.expr}\n" "403:{.expr}=99:{.expr}{$*}{.expr}\n" "404:{.expr}=99:{.expr}{$/}{.expr}\n" "405:{.expr}=98:{.expr}{$^}{.expr}\n" "406:{.expr}=0:{$(}{.expr}{$)}\n" "400:{.expr}=0:{!number}\n" "500:{.line}=0:{.expr}{$;}\n");
这初始化词法分析器以识别分隔符 '+', '-', '*', '/', '^', ';', '(', ')' 并跳过常用的空格字符,并初始化分析器以识别数学规则 '+,*,-,/,^' 并声明 '*' 比 '+' 具有更高的优先级,例如。
接口类
通常您只需要处理一个类,cxtPackage
。 此类导出访问该库所需的所有方法。 其中一些是
vSetInputStream()
- 设置输入流 :)vSetDelimeterIDs()
- 可用于设置语句结束令牌,在 C++ 中这可以是 ';'nReadUntilDelimeter()
- 解析输入流,直到找到下一个分隔令牌或到达输入流的末尾papbCheckForRule()
- 分析令牌流以查找给定规则,并返回解析树(如果成功)vRebalance()
- 根据优先级规则重新排列解析树
这些是最重要的。 有关更多详细信息,请参阅示例项目或查看页面 http://www.subground.cc/devel,该页面很快将提供一些有关可用类的最少文档以供下载。
新增:语法 IDE
完整下载中包含的新语法 IDE 提供了一个开发和测试分析器规则集的环境。 它具有一些语法突出显示功能,通过在编辑器中标记行来显示错误,并具有一个集成的测试环境来实时检查规则集的结果。 我还没有任何文档,并且 IDE 仍处于早期 beta 阶段,并且有一些外观错误(例如,可以通过剪贴板将 RTF 格式的文本插入到编辑器中 :-)),但大部分已经可以使用。
示例项目
完整下载中包含两个示例项目。 一个是几乎为空的示例应用程序,您可以轻松地使用它来探索该库,另一个项目 simpleCalc 展示了如何使用该库在 200 行中构建一个简单的表达式求值器。 有关该示例如何工作的逐步说明 在这里。
如何在自己的项目中使用它
确保将项目 cxTokenizer、cxAnalyzer 和 cxtPackage 插入到您的项目的工作区中。 调整您的项目的依赖项以依赖于 cxtPackage(它本身依赖于 cxAnalyzer,而 cxAnalyzer 又依赖于 cxTokenizer)。 如果您的项目不使用 MFC,则必须包含文件 common.cpp,该文件位于项目文件的基本目录中。 如果您有任何问题,请随时发送邮件至 alexander-berthold@web.de。 有关最新更新,另请参阅 http://www.subground.cc/devel
更新
- 2002-01-02
现在包含 C++(无模板和预处理器)语法。 另请参阅 此处。 - 2001-12-29
修复了分析器中的一个小错误。 IDE 下载现在包含一个尚未完成的 C 语法。 - 2001-12-27
已更新主页 URL 到无广告主机。 - 2001-12-26
上传了新版本,其中包括 grammarIDE 和分析器中的一些增强功能。