我想用正则表达式来表示抽象语法树。最好采用以下树的形式:
<regexp>
|
|
|
(seq <regexp> <regexp>)
/ \
/ \
/ \
(seq <regexp> <regexp>) (seq <regexp> <regexp>)
| | | |
| | | |
| | | |
(atom 1) (atom 2) (atom 3) (atom 4)
我已经看过和tikz-qtree
,forest
但是虽然最后一个包看起来非常强大,但我不太确定如何让它做我想做的事情。
关于如何解决这个问题,有什么建议或想法吗?
答案1
一个选项(我不确定从根到 1 级节点的边的确切位置,因此我尽可能封闭地遵循问题中的图表):
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
before typesetting nodes={content=\texttt{#1}}
}
[<regexp>,s sep=0pt
[(seq,edge={draw=none}]
[<regexp>,edge={draw=none}
[(atom 1)]
]
[<regexp>)
[(atom 2)]
]
[(seq]
[<regexp>,edge={draw=none}
[(atom 3)]
]
[<regexp>),edge={draw=none}
[(atom 4)]
]
]
\end{forest}
\end{document}
线条
for tree={
before typesetting nodes={content=\texttt{#1}}
}
只需以等宽字体排版标签;如果不需要,请删除它们。