背景
当前,我正在使用C MySQL连接器与数据库进行通信,有时我需要通过连接发送硬编码命令。和很多次一样,我犯了错误/错别字等。这是针对非常基本的数据库系统类,因此没有涉及行业。
问题
是否可以将constexpr
编译器实现为另一种只能运行词汇,语法和语义分析的语言,并报告错误吗?还是一些其他汇编步骤?
示例
假设我想发送此命令:
SELECT * FROM Persons
但是,我忘了键入 M
:
SELECT * FRO Persons
我会在运行时发现问题,如果知道语言,可以被编译器抓住。我唯一解决这个问题的想法是预处理器疯狂。
来自C ,我会这样称呼:
auto statement = sql_parse("...");
希望如果出现问题,应该会导致编译错误。
是否可以为另一种只能运行词汇,语法和语义分析的语言实施ConstexPR编译器并报告错误如果找到错误?还是一些其他汇编步骤?
否,在编译时间不可能仅使用C-Prepropessor/C 编译器。
您需要实现一个不同的工具来解析和验证SQL代码并为SQL绑定生成必要的C 代码。
auto statement = sql_parse("...");
将需要一个在运行时检查SQL语句的解析器。
有C 模板工具,例如boost::spirit
,可以使您在编译时间集成DSL(例如SQL语法)。这超出了C-Prepropersors的作用。
对于一个简单且实用的解决方案,我建议您在将其采用C 代码之前分别使用适当的工具测试您的SQL语句。