我正在编写语言规范,我需要解决以下基本问题。假设我有(诚然做作的)抽象语法:
<A> ::= <B> | <C>
<B> ::= 1 | 2 | 3
<C> ::= 4 | 5 | 6
这种语言的指称语义是什么样的?非终结符包含在 '<' 和 '>' 中,终结符不是。我想将1
...映射6
到自然数域。我完全不清楚的是我是否需要为非终端提供映射。似乎我不需要,因为,例如,<A> ::= <B> | <C>
没有意义;它只是一个结构。忽略,暂时我们可以完全消除这条规则。
所以,就目前而言,这就是我认为完整的指称定义应该是这样的,其中右侧(斜体)表示自然数的相应值:
[[1]] =
一
[[2]] =
二
[[3]] =
三
[[4]] =
四
[[5]] =
五
[[6]] =
六
A
从美学上讲,不提,B
或根本不提似乎很奇怪C
,但我认为这些符号永远不会出现在实际程序中(如4
:),所以也许这就足够了。我所拥有的关于这个主题的所有材料都在他们的讨论中忽略了语言定义过程的这个非常简单的具体细节。