私は言語仕様を書いていますが、次の初歩的な質問を解決する必要があります。(明らかに不自然な) 抽象構文があるとします。
<A> ::= <B> | <C>
<B> ::= 1 | 2 | 3
<C> ::= 4 | 5 | 6
この言語の表示的セマンティクスはどのように見えますか? 非終端記号は「<」と「>」で囲み、終端記号は囲みません。1
...6
を自然数の定義域にマッピングしたい。私にはまったく明確ではないことは、非端末にマッピングを提供する必要があるかどうかです。<A> ::= <B> | <C>
たとえば、意味がないので、そうする必要はないようです。それは単なる構造の一部です。今のところ、このルールを完全に排除できることは無視してください。
したがって、現状では、これは完全な表示定義が次のように見えるべきだと私が考えるものです。ここで、右側 (イタリック体) は自然数からの対応する値を表します。
[[1]] =
1
[[2]] =
2
[[3]] =
三
[[4]] =
四
[[5]] =
五
[[6]] =
六
A
美学的には、 、B
、またはまったく言及しないのは奇妙に思えC
ますが、これらの記号は実際のプログラム(: など4
) には決して現れないので、これで十分かもしれません。この主題に関する私が持っているすべての資料は、この非常に単純で基本的な言語定義プロセスの側面を議論から省略しています。