用 C 和 C++ 编写的解释器如何将标识符绑定到 C(++) 函数

2024-03-23

我在这里讨论的是 C 和/或 C++,因为这是我所知道的唯一用于解释器的语言,其中以下可能会出现问题:

如果我们有一种解释性语言 X,为其编写的库如何向该语言添加函数,然后可以从用该语言编写的程序中调用这些函数?

PHP 示例:

substr( $str, 5, 10 );
  • 如何将函数 substr 添加到 PHP 的“函数池”中,以便可以从脚本中调用它?

PHP 可以轻松地将所有已注册的函数名称存储在数组中,并在脚本中调用函数时对其进行搜索。但是,C(++)中显然没有eval,那么如何调用该函数呢?我假设 PHP 没有 100MB 的代码,例如:

if( identifier == "substr" )
{
   return PHP_SUBSTR(...);
} else if( ... ) {
   ...
}

哈哈,那会很有趣。我希望到目前为止您已经理解了我的问题。

  • 用C/C++编写的解释器如何解决这个问题?
  • 我该如何为我自己用 C++ 编写的实验性玩具解释器解决这个问题?

实际上脚本语言所做的事情就像你提到的那样。
它们包装函数并将该函数注册到解释器引擎。

卢阿样本:

static int io_read (lua_State *L) {
  return g_read(L, getiofile(L, IO_INPUT), 1);
}


static int f_read (lua_State *L) {
  return g_read(L, tofile(L), 2);
}
...
static const luaL_Reg flib[] = {
  {"close", io_close},
  {"flush", f_flush},
  {"lines", f_lines},
  {"read", f_read},
  {"seek", f_seek},
  {"setvbuf", f_setvbuf},
  {"write", f_write},
  {"__gc", io_gc},
  {"__tostring", io_tostring},
  {NULL, NULL}
};
...
luaL_register(L, NULL, flib);  /* file methods */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 C 和 C++ 编写的解释器如何将标识符绑定到 C(++) 函数 的相关文章

  • Windows 8中有没有特殊的API来挂载ISO文件?

    您可能知道 Windows 资源管理器允许将 ISO 文件装载到虚拟驱动器 有没有任何API可以用来做到这一点 本机函数调用AttachVirtualDisk https msdn microsoft com en us library w
  • C# 中两种不同类型的列表

    我目前在为客户提供购物车时遇到问题 他希望能够在 CartItems 之间添加文本 所以我想知道是否有某种方法仍然只有一个列表 我的解决方案是有两个列表 其中一个是 IList 类型 在计算购物车的重量和总体价格时会迭代 而另一个 ILis
  • 如何从更高级别启动用户级别的 Exe

    我希望一个进程始终在用户级别运行 当它由以管理员级别运行的安装程序 自定义 而不是 msi 启动时 或者当用户登录时 环顾四周 我不确定这是否可能 最简单的方法是有 2 个进程 一种是普通用户 它启动提升 管理进程 然后管理进程可以使用 I
  • C# 锁(mylocker) 不起作用

    我有很多 Web 服务调用 异步 在回调中 我会将结果绘制到 Excel 中 我想同步绘图方法 所以我使用以下内容 但是 从我在 Visual Studio 中追踪到 每次 lock locker 都会成功 并且有许多线程运行clearco
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 如何获取 PropertyGrid 的单元格值 (c#)?

    如何在 C 中获取属性网格项和项的值 例如 Name Ali LastName Ahmadi Name 和 LastName 是 propertygrid 的 2 个属性 PropertyGrid只是对象的组件模型表示的视图 我会说 查看组
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 在 C# 中设置风扇速度

    我知道以前有人问过这个问题 但我似乎无法让它发挥作用 我已调用以下内容 using System Management using System Management Instrumentation using System Runtime
  • 我可以创建一个 List> 吗?

    我正在尝试创建一个列表WeakReference使用 4 5 泛型实现 这样我就可以避免类型检查和转换WeakReference目标 但 WeakReference
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • 如何在 C# 中将 json 转换为平面结构

    我正在尝试用 C 编写函数 将 JSON 转换为键 值对 它应该支持数组 例如下面的 JSON title title value components component id id1 menu title menu title1 tit

随机推荐

  • 使用ajax将Flash视频加载到div中

    我有一个客户希望能够从视频缩略图播放列表中进行选择 并且它会替换页面上已有的视频 我还需要观察加载时间 因此认为如果使用 ajax 单击每个视频 则请求该视频会更好吗 我是 ajax 新手 所以不确定这是否是最好的选择 我的页面如下 div
  • /arm64/Image 到 zImage 或 boot.img

    大家好 我一直在试图弄清楚如何使我的 android 内核成为 zImage 或 boot img 我试图弄清楚但没有运气 有人告诉我 zImage 不适用于我的设备 因为它是 arm64 内核 但我想我会再问一次 如果是这种情况 我会尝试
  • 在 MongoDB Spring Data 中使用多个方面

    我想在一个聚合中运行多个方面以节省数据库往返次数 这是我的弹簧数据代码 final BalancesDTO total this mongoTemplate aggregate newAggregation Get all fund tra
  • 对 ole db 提供程序“microsoft.ace.oledb.12.0”的临时访问已被拒绝。您必须通过链接服务器访问该提供商

    当尝试在sql server中导入excel文件时 出现上述错误 转到链接服务器 gt 提供程序 然后双击您在 OPENROWSET 查询中使用的提供程序 然后检查是否 禁止临时访问 是否启用如下所示 您还可以在注册表中的 HKEY LOC
  • 了解递归函数的工作原理

    正如标题所解释的 我有一个非常基本的编程问题 但我还无法理解 过滤掉所有 极其聪明的 为了理解递归 必须先理解递归 网上各种帖子的回复我还是不太明白 了解当面对不知道我们不知道的事情时 我们可能会倾向于提出错误的问题或错误地提出正确的问题我
  • Nodejs为Redis请求设置超时

    我编写了一个简单的服务 使用 redis 将数据存储在内存中或从磁盘中获取数据 然后存储在内存中 并希望为慢速请求设置超时 我希望找到一种方法发出带有超时的获取请求 以防止该请求挂起 任何帮助表示赞赏 因此 您可以在这里做一些事情 但是 首
  • MonoDroid 的 MVVM 框架?

    MonoDroid 已经有 MVVM 框架了吗 或者 MonoDroid 是否能够自行绑定属性和命令 例如用于 WPF Silverlight WP7 的 MVVM Light Toolkit 还没有 MVVM 但是有 MonoCross
  • 带 POST 参数的 FacesContext 重定向

    我需要使用 POST 参数将页面重定向到外部站点 但我无法使用普通 HTML
  • OpenCV 变换矩阵:仿射与透视扭曲

    您好 我目前正在研究图像转换 但有一件关于扭曲的事情我不明白 即有什么区别warpAffine http docs opencv org 2 4 modules imgproc doc geometric transformations h
  • 过期的消息不会从 RabbitMQ 中删除

    我通过生产者向 RabbitMQ 发送一条普通消息 然后发送第二条消息expiration属性分配给一个值 然后使用rabbitmqctl list queues命令我监视消息的状态 我发现如果我先发送一条普通消息 然后发送一条消息expi
  • SharePoint 在代码隐藏中获取当前页面的完整 URL

    在 SharePoint 中 如何从隐藏代码中获取当前页面的 url 例如包含 blah aspx 页面 SPContext Current Web Url 给出http vm en http vm en 我需要它http vm en Pa
  • 当信号到来时杀死 bash 脚本前台子进程

    我将 fastcgi 应用程序包装在 bash 脚本中 如下所示 bin bash stuff fastcgi bin stuff 由于 bash 仅在前台脚本结束时执行信号陷阱 所以我不能只是kill TERM scriptpid因为 f
  • Objective-C 类中的 Swift 协议扩展

    我有一个用 Swift 编写的协议 应该由多个控制器遵守 其中一些控制器是用 Objective C 编写的 并非所有人都需要此 Swift 协议中的所有方法 因此首先我决定提供一些具有默认实现的方法 以使它们成为 可选 但在这种情况下 我
  • TensorFlow 的无效参数错误(形状不兼容)

    我正在尝试使用 MNIST 数据集的张量流训练一个简单的网络 目前虽然它不起作用 它基本上是 TensorFlow 网站上给出的示例的修改版本 我只是改变了几行并删除了一层来看看发生了什么 这是我的代码 usr bin python imp
  • Spark JDBC fetchsize 选项

    我目前有一个应用程序 它应该连接到不同类型的数据库 使用 Spark 的 JDBC 选项在该数据库上运行特定查询 然后将生成的 DataFrame 写入 HDFS Oracle 的性能非常糟糕 没有检查所有这些 原来是因为fetchSize
  • 使用 matlab 识别实时视频源中的白框

    我目前正在使用 matlab 编写一个项目 该项目使用两个相对较大的方块来识别实时视频源中的一张纸 然而 纸张可以是任何颜色或上面有任何图像 我对彩色图像使用白色框 对非彩色图像使用黑色框 尽管这些框在视频中显示得非常清楚 但我不知道如何编
  • CSS3 同一元素的多次转换

    我正在尝试为我的一张背景图像制作下拉效果 我可以使用 css3 做到这一点 但它并不完整 效果应该是窗帘落下然后弹回一点 css3 的问题是我不知道如何对同一属性进行转换 因为最后一个会覆盖前一个 这是我的代码 ul nav li a AD
  • 如何在“删除文件”任务中从删除中排除某些目录和文件

    我想删除其中的所有文件 Build ArtifactStagingDirectory 它是相应构建代理文件夹中所谓的 a 文件夹 单击阅读有关天蓝色管道中预定义变量的更多信息 我也知道删除文件任务 https learn microsoft
  • Spark 结构化流检查点在生产中的使用

    在使用 Spark 结构化流时 我很难理解检查点的工作原理 我有一个 Spark 进程 它会生成一些事件 并将其记录在 Hive 表中 对于这些事件 我在 kafka 流中收到确认事件 我创建了一个新的火花过程 将 Hive 日志表中的事件
  • 用 C 和 C++ 编写的解释器如何将标识符绑定到 C(++) 函数

    我在这里讨论的是 C 和 或 C 因为这是我所知道的唯一用于解释器的语言 其中以下可能会出现问题 如果我们有一种解释性语言 X 为其编写的库如何向该语言添加函数 然后可以从用该语言编写的程序中调用这些函数 PHP 示例 substr str