Вот несколько методов, которые можно использовать для создания онлайн-компилятора, а также примеры кода:
Метод 1: выполнение на стороне сервера
В этом методе код отправляется на сервер, где он компилируется и выполняется. Затем сервер возвращает результат пользователю.
Пример использования Node.js и Express:
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.get('/compile', (req, res) => {
const code = req.query.code;
exec(`echo "${code}" | gcc -x c -o output -`, (error, stdout, stderr) => {
if (error) {
res.send(stderr);
} else {
exec('./output', (error, stdout, stderr) => {
res.send(stdout || stderr);
});
}
});
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
Метод 2: выполнение на стороне клиента.
В этом методе код выполняется непосредственно в браузере пользователя с использованием JavaScript.
Пример с использованием HTML, CSS и JavaScript:
<!DOCTYPE html>
<html>
<head>
<title>Online Compiler</title>
<style>
#output {
height: 200px;
width: 400px;
border: 1px solid black;
padding: 10px;
}
</style>
</head>
<body>
<textarea id="code" rows="10" cols="50"></textarea>
<button onclick="executeCode()">Run</button>
<pre id="output"></pre>
<script>
function executeCode() {
const code = document.getElementById('code').value;
const output = document.getElementById('output');
try {
const result = eval(code);
output.textContent = String(result);
} catch (error) {
output.textContent = String(error);
}
}
</script>
</body>
</html>
Метод 3: выполнение на основе Docker
Этот метод использует контейнеры Docker для компиляции и выполнения кода.
Пример использования Docker и Flask (Python):
from flask import Flask, request
import docker
app = Flask(__name__)
client = docker.from_env()
@app.route('/compile', methods=['POST'])
def compile_code():
code = request.form['code']
client.containers.run('gcc', 'bash -c "echo \'{0}\' | gcc -x c -o output - && ./output"'.format(code))
return 'Code executed successfully'
if __name__ == '__main__':
app.run()