我想构建一个基于 Web 的服务,让用户输入一些 C 代码,然后服务器将编译并运行并返回结果。我知道,我知道,安全噩梦。所以也许我可以选择 chroot 或 lxc 或类似的东西。关于这些,stackoverflow 上有很好的帖子。另一种选择是使用编程竞赛软件。
我正在做的不是一般的编程目的。用户将能够向一些存根函数添加代码,仅此而已。他们不需要能够使用指针、数组或字符串。他们不应该能够打开/关闭/读取/写入文件或套接字或共享内存。他们甚至无法创建自己的功能。他们应该只能执行以下操作:
// style comments
/* */ style comments
declare variables of type int, double, float, int64_t, int32_t, uint64_t, uint32_t
for, while, do
+, -, *, /, % arithmetic operators ( * as dereference is NOT allowed )
( )
+, - unary operators
++, -- operators
math functions like sin, cos, abs, fabs, etc
a bunch of API functions that will exist
switch, case, break
{ }
if, else, ==, !=
=, +=, -=, *=, /=, etc
有没有一种工具可以用来检查给定的 C 代码块,以确保它只包含那些元素?
如果我找不到现有的解决方案,我可以使用 Antlr 或类似的东西自己想出它。