gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:51:24 26 4
gpt4 key购买 nike

背景

目前我正在使用 C++ MySQL 连接器与数据库通信,有时我需要通过连接发送硬编码命令。和很多次一样,我犯了错误/拼写错误等等。这是一个非常基础的数据库系统类(class),因此不涉及任何行业。

问题

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

例子

假设我想发送这个命令:

SELECT * FROM Persons

但是,我忘记输入 M:

SELECT * FRO Persons

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

在 C++ 中,我会这样调用它:

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

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

最佳答案

Is is possible to implement constexpr compiler for another language that would just run lexical, syntax, and semantic analyzis and report errors if it found them? Or maybe some additional compilation step?

不,这在编译时仅使用 C 预处理器/C++ 编译器是不可能的。

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

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

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


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


为了获得简单实用的解决方案,我建议您在将 SQL 语句采用到 C++ 代码中之前,使用适当的工具对其进行单独测试。

关于c++ - 是否可以在没有宏的情况下将语言嵌入到 C++ 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com