2012-03-05 17 views
9

L'ingresso è uno:Render albero di sintassi linguistica browser

(1) una rappresentazione parentesi di un albero con nodi interni etichettati come:

(S (N John) (VP (V hit) (NP (D the) (N ball)))) 

con uscita:

enter image description here

(Se le linee sono tratteggiate e se la didascalia è presente non sono significative.)

Oppure l'ingresso potrebbe essere:

(2) uno staffaggio di parole senza etichette Es:

((John) ((hit) ((the) (ball)))) 

con uscita come sopra (senza etichette interne questa volta, solo la struttura ad albero).

Un altro componente dell'ingresso è se l'albero è etichettato come in (1) o non marcato come in (2).


La mia domanda: Qual è il modo migliore (più veloce tempo di sviluppo) per rendere questi alberi nel browser in JavaScript? Tutto dovrebbe succedere dal lato del cliente.

Sto immaginando una semplice interfaccia con solo una casella di testo (e un pulsante di opzione che specifica se si tratta di un albero etichettato o meno), che, una volta modificata, attiva un albero per il rendering (se l'input non ha alcuna sintassi errori).

risposta

4

In realtà non è una libreria lato server per convertire la rappresentazione tra parentesi in albero, phpsyntaxtree.
È possibile reimplementare utilizzando javascript libreria grafica come jsdraw2d o rotolare su JavaScript utilizzando HTML5 canvas.

10 Best Javascript Drawing and Canvas Libraries

+0

Grazie, che è un collegamento impressionante! È un sostituto quasi perfetto per quello che voglio. Vorrei solo che accettasse anche l'input con parentesi invece di parentesi quadre. – dsg

9

io non sono sicuro di quello che la politica è per l'auto-spine su StackOverflow. Mi scuso se questo infrange le regole.

Hai visto la mia soluzione per questo? mshang.ca/syntree

Non è esattamente quello che vuoi, ma sei libero di rubare il code se ti aiuta.

+2

È fantastico. Potresti farlo accettare parentesi oltre a parentesi come marcatore di elementi costitutivi? Es .: Voglio essere in grado di rendere l'albero dell'esempio usando '(S (NP This) (VP (V is) (^ NP a wug)))'. – dsg

+0

Non avevo intenzione di farlo perché non voglio introdurre troppi caratteri speciali. Penso che le parentesi quadre siano la norma nella linguistica. Tuttavia, ti incoraggio a sborsare il progetto e a modificarlo in base alle tue esigenze. – mshang

+0

per quanto la soluzione è utile, StackOverflow è ok con questo –