0

ここで EBNF の ISO 仕様の pdf を見ました(お金がかかるように見える ISO Web サイトを除いて、公式のものは見つかりませんでした)、空白がよくわかりません。

公式の標準がメタ識別子にスペースを許可しているかどうかを知っている人はいますか? 標準ドキュメント (セクション 8.1) のメタ識別子に基づいて、ノーと言うでしょうが、同じ標準ドキュメントの同じ例を見ると、イエスと言っているように見えます。

そのドキュメントの 8.1 の上部にあるコメントでは、それ自体を使用して EBNF を定義していると言っているようです。これについて私が混乱しているのは、次のような行です。

meta identifier = letter, {letter | decimal digit}
(* A <meta identifier> is the name of a
syntactic element of the language being
defined *);

メタ識別子はそれ自体がメタ識別子である必要がありますが、私が見る限り、それはメタ識別子に適合しません (文字と任意の数の数字または文字)。

誰が何が起こっているのか知っていますか?

4

3 に答える 3

1

実際、公式の ISO EBNF 仕様 (ISO/IEC 14977:1996) は、こちらの ISO Web サイトから無料でダウンロードできます。実際には、メタ識別子を次のように定義します。

meta identifier = letter, {meta identifier character};

meta identifier character = letter | decimal digit;

この定義では、4.14 および 4.15 を指します。そこでは、メタ識別子文字は文字と 10 進数のみで構成されると明確に述べられています。

彼らが EBNF を指定するために使用する EBNF が識別子にスペースを許可するのは、実に奇妙です。私は常に、EBNF では識別子に空白を使用できると信じていました。これはウィキペディアにも記載されています (ただし、文法は他の点で不完全です)。

identifier = letter , { letter | digit | " " } ;

それで、彼らは標準でこれを見落としたのでしょうか?または、私たちは両方とも何かが欠けています。とにかく、公式の標準ができたので、それを理解できることを願っています。

于 2013-03-10T17:02:43.467 に答える