语法树
过程
使用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}