如何描述语言的语义?
How to describe the semantics of a language?
语法有 EBNF ISO 14977 标准。
对于运行时,我们有 CLI ISO 23271 标准
另见 Simple definition of "semantics" as it is commonly used in relation to programming languages/APIs?
但是如何以声明的方式描述从 EBNF 到 CLI 规范的转换?
即使用 S-attributed grammar 是否足够?哪个标准定义了这种语法的句法?
定义语言语义的方法有很多种。它们都必须以某种方式表达程序文本与"what it computes".
之间的关系
简短但不完整的基本技术列表:
- 定义解释器("operational semantics")
- 定义从源代码到丰富的 lambda 演算的映射 ("denotational semantics")
- 定义从源代码到另一种定义明确的语言的映射("transformational semantics")
本质上,这些是在程序实例的源文本上定义的计算。
您可以实现这些计算有许多不同的方式。 一种 实现它们的方法可能是 "S-attributed" 语法,尽管我不明白为什么您只想使用 S 属性而不是具有继承属性的标准属性语法。
鉴于有很多方法可以做到这一点,我怀疑您是否会找到一个标准。当然,编程语言委员会并没有使用它。哎呀,他们甚至不会使用 BNF 的标准。
语法有 EBNF ISO 14977 标准。
对于运行时,我们有 CLI ISO 23271 标准
另见 Simple definition of "semantics" as it is commonly used in relation to programming languages/APIs?
但是如何以声明的方式描述从 EBNF 到 CLI 规范的转换? 即使用 S-attributed grammar 是否足够?哪个标准定义了这种语法的句法?
定义语言语义的方法有很多种。它们都必须以某种方式表达程序文本与"what it computes".
之间的关系简短但不完整的基本技术列表:
- 定义解释器("operational semantics")
- 定义从源代码到丰富的 lambda 演算的映射 ("denotational semantics")
- 定义从源代码到另一种定义明确的语言的映射("transformational semantics")
本质上,这些是在程序实例的源文本上定义的计算。
您可以实现这些计算有许多不同的方式。 一种 实现它们的方法可能是 "S-attributed" 语法,尽管我不明白为什么您只想使用 S 属性而不是具有继承属性的标准属性语法。
鉴于有很多方法可以做到这一点,我怀疑您是否会找到一个标准。当然,编程语言委员会并没有使用它。哎呀,他们甚至不会使用 BNF 的标准。