Árbol de prueba de esquema

Árbol de prueba de esquema

Actualmente estoy trabajando en la creación de árboles de prueba para expresiones regulares en un esquema. La forma sugerida de escribirlos en el curso que estoy tomando es la siguiente, que escribí manualmente en TeX.

Árbol de prueba

Sin embargo, este es un proceso tedioso, especialmente para expresiones largas. Entonces, lo que estoy buscando es una forma astuta de crear el tipo de árbol de prueba que se muestra arriba, o tal vez una alternativa que pueda lograr lo mismo.

Editar:

Aquí está mi código, no me importa escribirlo en el árbol, pero de esta manera es muy, muy lento. Entonces, si hay un paquete que pueda hacer parte del trabajo de posicionamiento por mí, sería un campista feliz.

\phantom{ATOM}\ \ \ \ \ 1 is a Scheme integer\qquad\qquad\qquad (\%regexp (atom 2))\\
ATOM ---------------------\qquad\qquad SEQ ------------------------------------------------------------\\
\phantom{ATOM} (\%regexp (atom 1)) \qquad\qquad\qquad\ \ (\%regexp (seq (atom 2) (seq (atom 3) (seq (atom 4) (empty)))\\
\phantom{A}SEQ ---------------------------------------------------------------------------------------------\\
\phantom{ATOM} (\%regexp (seq (atom 1) (seq (atom 2) (seq (atom 3) (seq (atom 4) (empty))))))

Edición 2: No he encontrado una solución con el bussproofspaquete, pero todavía no es óptima, se ve un poco extraño cuando los árboles de prueba crecen.

Árbol de pruebas

Mi código para crear esto es:

\begin{prooftree}
\def\ScoreOverhang{1pt} 
\def\extraVskip{6pt}
\def\defaultHypSeparation{\hskip .2in}
\def\ruleScoreFiller{\hbox to1.1mm{\hss\vrule width0.9mm height0.4pt depth0.0pt\hss}}
\AxiomC{1 is a Scheme integer}
\LeftLabel{ATOM}
\UnaryInfC{(\%regexp (atom 1))}
\AxiomC{2 is a Scheme integer}
\LeftLabel{ATOM}
\UnaryInfC{(\%regexp (atom 2))}
\AxiomC{3 is a Scheme integer}
\LeftLabel{ATOM}
\UnaryInfC{(\%regexp (atom 3))}
\AxiomC{4 is a Scheme integer}
\LeftLabel{ATOM}
\UnaryInfC{(\%regexp (atom 4))}
\AxiomC{}
\LeftLabel{EMPTY}
\UnaryInfC{(\%regexp (empty))}
\LeftLabel{SEQ}
\BinaryInfC{(\%regexp (seq (atom 4) (empty)))}
\LeftLabel{SEQ}
\BinaryInfC{(\%regexp (seq (atom 3) (seq (atom 4) (empty))))}
\LeftLabel{SEQ}
\BinaryInfC{(\%regexp (seq (atom 2) (seq (atom 3) (seq (atom 4) (empty)))))}
\LeftLabel{SEQ}
\BinaryInfC{(\%regexp (seq (atom 1) (seq (atom 2) (seq (atom 3) (seq (atom 4) (empty))))))}
\end{prooftree}

información relacionada