如何将c合并到c中(特别是lex)

How to incorporate c in c# (specially lex)

本文关键字:特别是 lex 合并      更新时间:2023-10-16

有人能告诉我正确的方向吗?我在lex中有一个解析器,我想在C#中使用,以前有人做过这样的事情吗?或者把C/C++和C#混合在一起吗?

编辑:更具体地说,我想解析数学表达式和XML。

有许多C#Lex处理器。例如:

http://www.seclab.tuwien.ac.at/projects/cuplex/lex.htm

您可以制作一个c代码的dll,并在具有PlatformInvoke机制的c#中使用它。

即使您可以创建包含两个项目的解决方案,其中一个是包含c/c++源的库项目,另一个是c#。

如果您将仅在桌面/服务器应用程序中使用此模块(例如,不在Silverlight或Compact Framework上),则可以构建支持clr的C/C++代码,并从C#使用它。

我使用了C++版本的flex并取得了巨大成功。

您可以从获得windows预构建的二进制文件

http://www.kohsuke.org/flex++野牛++/

具体来说,我已经用它来解析一个包含十几条规则的EBNF语法(对于boost::spirit来说太多了),这些规则将带有等语句的用户脚本作为输入

  IF a > 10 AND b < -22 THEN OUTPUT X

所以我认为这对你提到的数学表达式来说很好。

解析XML是另一回事。有这么多专门构建的用于解析XML的库,为什么要推出自己的库?TinyXML(http://www.grinninglizard.com/tinyxml/)和CMarkup(http://www.firstobject.com/dn_markup.htm),我已经在几个项目中成功地使用了这两种方法。