Методы создания онлайн-компилятора с примерами кода

Вот несколько методов, которые можно использовать для создания онлайн-компилятора, а также примеры кода:

Метод 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()