语法树
过程
使用Overleaf在线编辑LaTex,由于使用汉字ctex包,需在overleaf中将编译器换成XeLaTex(界面左上角Menu→Compiler→XeLaTex)。
详细语法参考VisualTikZ.pdf
题目
2-6 设已给文法G[<程序>]:
<程序>→<分程序>|<复合语句>
<分程序>→<无标号分程序>|<标号>:<分程序>
<复合语句>→<无标号复合语句>|<标号>:<复合语句>
<无标号分程序>→<分程序首部>;<复合尾部>
<无标号复合语句>→begin<复合尾部>
<分程序首部>→begin<说明>|<分程序首部>;<说明>
<复合尾部>→<语句>end|<语句>;<复合尾部>
<说明>→d
<语句>→s
<标号>→L
(1)给出以下句子
L:L:begin d;d;s;s end
的最左推导和最右推导。
(2)画出上述句子的语法树。
LaTex代码
\documentclass{
standalone}
\usepackage[UTF8]{
ctex} %中文
\usepackage{
tikz} %LaTex tikz包
\usetikzlibrary{
trees}
\begin{
document}
\begin{
tikzpicture}[level distance=10em,
T/.style={
edge from parent fork #1, grow=#1, level distance=4em, sibling distance=4em, -}]
\node {
<程序>}
[T=down]
child{
node{
<分程序>}
child{
node{
<标号>}
child{
node{
L}}
}
child{
node{
:}}
child{
node{
<分程序>}
child{
node{
<标号>}
child{
node{
L}}
}
child{
node{
:}}
child{
node{
<分程序>}
child{
node{
<无标号分程序>}[sibling distance=7em]
child{
node{
<分程序首部>}[sibling distance=4em]
child{
node{
<分程序首部>}
child{
node{
begin}}
child{
node{
<说明>}
child{
node{
d}}
}
}
child{
node{
;}}
child{
node{
<说明>}
child{
node{
d}}
}
}
child{
node{
;}}
child{
node{
<复合尾部>}[sibling distance=4em]
child{
node{
<语句>}
child{
node{
s}}
}
child{
node{
;}}
child{
node{
<复合尾部>}
child{
node{
<语句>}
child{
node{
s}}
}
child{
node{
end}}
}
}
}
}
}
};
\end{
tikzpicture}
\end{
document}