package com.github.jknack.antlr4ide.runtime; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class Antlr4Server extends Thread { protected Socket clientSocket; public static void main(final String[] args) throws IOException { int port = Integer.parseInt(args[0]); ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(port); try { while (true) { new Antlr4Server(serverSocket.accept()).start(); } } catch (IOException ex) { System.err.println("Accept failed: " + ex.getMessage()); System.exit(1); } } catch (IOException ex) { System.err.println("Could not listen on port: " + port + ". Reason: " + ex.getMessage()); System.exit(1); } finally { try { serverSocket.close(); } catch (IOException ex) { System.err.println("Could not close on port: " + port + ". Reason: " + ex.getMessage()); System.exit(1); } } } private Antlr4Server(final Socket clientSoc) { clientSocket = clientSoc; } @Override public void run() { try { PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String command = in.readLine(); if ("parsetree".equals(command)) { String file = in.readLine(); String lexerFile = in.readLine(); String outdir = in.readLine(); int importSize = Integer.parseInt(in.readLine()); List<String> imports = new ArrayList<String>(); for(int i = 0; i < importSize; i++) { String imported = in.readLine(); imports.add(imported); } String startRule = in.readLine(); String input = unescape(in.readLine()); String sexpression = new ParseTreeCommand(out).run(file, lexerFile.equals("null") ? null : lexerFile, outdir, imports, startRule, input); out.println(sexpression); } else { System.err.println("error: unknown command " + command); } out.close(); in.close(); clientSocket.close(); } catch (IOException ex) { System.err.println("Problem with Communication Server: " + ex.getMessage()); System.exit(1); } } private String unescape(final String string) { return string .replace("___creturn__", "\r") .replace("___nline__", "\n"); } }