如何将c合并到c中(特别是lex)
How to incorporate c in c# (specially lex)
有人能告诉我正确的方向吗?我在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),我已经在几个项目中成功地使用了这两种方法。
相关文章:
- 我刚刚安装了Visual Studio,遇到了一些错误,特别是WindowsSDKDir属性未定义.可能找不到某些生成工
- 平均循环值(特别是 HSL 配色方案中的色调)
- 如何通过函数参数使用 fstream(特别是 ofstream)
- 使用 C/C++ 以外的语言构建共享库,特别是 prolog
- 是否提供了在linux上交叉编译gtkmm(特别是v3)windows库/应用程序的说明
- GCC 地址清理器 - 将库功能列入黑名单(特别是 boost::test)
- std::bind通常适用于仅移动类型,特别是std::unique_ptr
- 当我可以将RNG传递给分发时,为什么要使用variate_generator?(特别是C++和Boost)
- 了解函数特征模板的工作原理.特别是,指向成员函数的指针是怎么处理的
- 如何在C++中使用%d,特别是在DrawText()中
- 如何在SWIG包装C++代码中向目标语言(特别是Python)添加替代构造函数
- 如何将c合并到c中(特别是lex)
- C++-占位符是如何工作的(特别是在boost::type_erasure中)
- 如何在xml树中反向行走节点,特别是libxml/c++
- 当您泄漏"device"和"device context"时会发生什么 - 特别是 d3d?
- 转换到另一个库(特别是c++)
- 我迷失在提升库中(特别是boost_program_options)
- msys/MinGW,即使安装了也找不到libpng,试图编译xpdf(特别是pdftopng)
- 并发与并行——特别是在c++中
- 矢量化/优化循环,用于宽寄存器(特别是Xeon Phi)的未对齐数据访问