应该使用什么标准来定义(正式)语言?

应该使用什么标准来定义(正式)语言?

我想知道在递归定义(形式)语言时应该使用哪个标准符号作为分隔符,例如以下算术表达式片段:

X ::= 0 | 1 | X + X | X * X |

我使用 |,但我必须手动在横线和左右符号之间添加空格。此外,在其他文档或论文中,横线看起来比标准横线大,所以我想知道是否有特定的符号或最佳做法。

编辑:这是我现在正在使用的代码的简短版本:

\documentclass[11pt,letterpaper]{report}

\usepackage{amssymb,amsmath,amsfonts,amsxtra,amsthm}
% etc...

\begin{document}

% ...

\[ A ::= 0 | 1 | A+A | A \times A \]

%...

\end{document}

虽然我正在寻找更像第 4 页定义的间距,但大约在 1.1 的末尾http://perso.ens-lyon.fr/olivier.laurent/folgames.pdf例如。我认为它被称为 Backus-Naur 范式或类似的东西。

答案1

这些条看起来像关系符号,所以\mid应该是选择。

但是,为其定义自己的命令肯定可以被视为最佳实践:只需更改其定义,即可轻松更改符号的外观。这里有一个示例,其中用于\renewcommand展示如何在不更改文档代码的情况下修改符号。

\documentclass[11pt,letterpaper]{report}
\usepackage{amsmath,amssymb,amsthm}

\usepackage{bm} % for the second version

\newcommand{\bnfor}{\mid}

\begin{document}

\[ A ::= 0 \bnfor 1 \bnfor A+A \bnfor A \times A \]

\renewcommand{\bnfor}{\mathrel{\big\bracevert}}

\[ A ::= 0 \bnfor 1 \bnfor A+A \bnfor A \times A \]

\end{document}

在此处输入图片描述

相关内容