Пример #1
0
        static void Main(string[] args)
        {
            if (args[0] == "--server")
            {
                new CompilerServer().Run("http://*:3001/");
                return;
            }
            var fileAsString = File.ReadAllText(args[0]);
            var tokens       = new Scanner(fileAsString).Scan();

            var parser  = new Parser(tokens);
            var program = parser.Parse();

            new Analyzer(program);

            var wasm   = new Generator(program).Generate();
            var binary = new WASMwriter(wasm).Write();

            var bWriter = new BinaryWriter(File.Open("pascal.wasm", FileMode.Create));

            foreach (var b in binary)
            {
                bWriter.Write(b);
            }

            bWriter.Close();
        }
Пример #2
0
    public void Run(string addr)
    {
        HttpListener listener = new HttpListener();

        listener.Prefixes.Add(addr);
        listener.Start();
        Console.WriteLine("Listening");

        while (true)
        {
            HttpListenerContext context = listener.GetContext();
            HttpListenerRequest request = context.Request;
            var body     = request.InputStream;
            var encoding = request.ContentEncoding;
            var reader   = new System.IO.StreamReader(body, encoding);

            var code = reader.ReadToEnd();

            var tokens = new Scanner(code).Scan();

            var parser  = new Parser(tokens);
            var program = parser.Parse();

            new Analyzer(program);

            var wasm   = new Generator(program).Generate();
            var binary = new WASMwriter(wasm).Write();

            // Obtain a response object.
            HttpListenerResponse response = context.Response;

            // Construct a response.
            byte[] buffer = binary.ToArray();
            // Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length;
            response.AppendHeader("Access-Control-Allow-Origin", "*");
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            // You must close the output stream.
            output.Close();
        }
    }