如何在c#中加入c(特别是lex)

时间:2012-01-13 18:33:24

标签: c# c++ .net c lex

有人能指出我正确的方向,我有一个lex中的解析器我想在C#中使用,有没有人在做过这样的事情,或者用C#混合c / c ++?

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我使用了一个C ++版本的flex非常成功。

您可以从

获取Windows预构建的二进制文件

http://www.kohsuke.org/flex++bison++/

具体来说,我使用它来解析一个包含十几个规则的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),我已经在几个项目中成功使用过。