目前我正在使用C ++ MySQL连接器与数据库进行通信,有时我需要通过连接发送硬编码命令。和很多次一样,我犯了错误/错别字等等。这是一个非常基础的数据库系统类,所以没有涉及行业。
是否可以为另一种只运行词法,语法和语义分析的语言实现constexpr
编译器,并在发现错误时报告错误?或者可能是一些额外的编译步骤?
假设我想发送此命令:
SELECT * FROM Persons
但相反,我忘记输入M
:
SELECT * FRO Persons
我会在运行时发现问题,如果它知道语言,编译器可能会发现问题。我解决这个问题的唯一想法是预处理器疯狂。
从C ++开始,我会这样称呼它:
auto statement = sql_parse("...");
并希望如果出现问题,它应该导致编译错误。
答案 0 :(得分:3)
是否有可能为另一种语言实现constexpr编译器,该语言只运行词法,语法和语义分析,并在发现错误时报告错误?或者可能是一些额外的编译步骤?
仅在编译时不能使用C-preprocessor / C ++编译器。
您需要实现一个不同的工具来解析和验证SQL代码,并为SQL绑定生成必要的C ++代码。
auto statement = sql_parse("...");
需要一个在运行时检查SQL语句的解析器。
有像boost::spirit
这样的C ++模板工具,允许您在编译时集成DSL(如SQL语法)。这超出了C预处理器的作用。
为了一个简单实用的解决方案,我建议您在将SQL语句用于C ++代码之前,使用适当的工具单独测试它们。