是否可以在没有宏的情况下将语言嵌入到C ++中?

时间:2017-09-09 16:16:51

标签: c++ compilation

背景

目前我正在使用C ++ MySQL连接器与数据库进行通信,有时我需要通过连接发送硬编码命令。和很多次一样,我犯了错误/错别字等等。这是一个非常基础的数据库系统类,所以没有涉及行业。

问题

是否可以为另一种只运行词法,语法和语义分析的语言实现constexpr编译器,并在发现错误时报告错误?或者可能是一些额外的编译步骤?

实施例

假设我想发送此命令:

SELECT * FROM Persons

但相反,我忘记输入M

SELECT * FRO Persons

我会在运行时发现问题,如果它知道语言,编译器可能会发现问题。我解决这个问题的唯一想法是预处理器疯狂。

从C ++开始,我会这样称呼它:

auto statement = sql_parse("...");

并希望如果出现问题,它应该导致编译错误。

1 个答案:

答案 0 :(得分:3)

  

是否有可能为另一种语言实现constexpr编译器,该语言只运行词法,语法和语义分析,并在发现错误时报告错误?或者可能是一些额外的编译步骤?

仅在编译时不能使用C-preprocessor / C ++编译器。

您需要实现一个不同的工具来解析和验证SQL代码,并为SQL绑定生成必要的C ++代码。

auto statement = sql_parse("...");

需要一个在运行时检查SQL语句的解析器。

有像boost::spirit这样的C ++模板工具,允许您在编译时集成DSL(如SQL语法)。这超出了C预处理器的作用。

为了一个简单实用的解决方案,我建议您在将SQL语句用于C ++代码之前,使用适当的工具单独测试它们。