带有森林或 qtree 的正则表达式 AST

带有森林或 qtree 的正则表达式 AST

我想用正则表达式来表示抽象语法树。最好采用以下树的形式:

                            <regexp>
                               |
                               |
                               |
                  (seq <regexp> <regexp>)
                         /          \
                        /            \
                       /              \
(seq <regexp> <regexp>)                (seq <regexp> <regexp>)
        |        |                             |        |
        |        |                             |        |
        |        |                             |        |
    (atom 1)  (atom 2)                     (atom 3)  (atom 4)

我已经看过和tikz-qtreeforest但是虽然最后一个包看起来非常强大,但我不太确定如何让它做我想做的事情。

关于如何解决这个问题,有什么建议或想法吗?

答案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}}
}  

只需以等宽字体排版标签;如果不需要,请删除它们。

相关内容