WSN - Wirth syntax notation 沃斯语法符号
一、 WSN - (Wirth syntax notation) 沃斯语法符号
沃斯语法符号(WSN)是一种元语法,即一种描述形式语言的形式化方法。
最初由Niklaus Wirth于1977年提出,作为巴科斯-诺尔形式(BNF)的替代方案。
它比BNF有几个优点,因为它可以使用自身定义,它包含一个显式的迭代构造,并且避免了为空字符串使用显式符号(如<空格>或ε)。
WSN已被用于多个国际标准,从ISO 10303-21开始。
二、WSN 自己定义自己
syntax = { production } .
production = identifier "=" expression "." .
expression = term { "|" term } .
term= factor { factor } .
factor = identifier | literal | " [" expression "] " | "(" expression ")" | "{" expression "}" .
identifier = letter { letter } .
literal = " character { character } " .
- = 等号表示新生成或者(新)定义。
- 左侧的元素被定义为右侧元素的组合。
- 每个新的生成(定义)以 .(句号)终止。
我们今天认为这些概念是理所当然的,但它们在1977年是及其具有开创性的,甚至是有争议的。
Wirth后来将一些概念(具有不同的语法和符号)合并到扩展的巴科斯-诺尔形式中。
三、 GoLang Notation - Go语言的符号定义
Syntax = { Production } .
Production = production_name "=" [ Expression ] "." .
Expression = Term { "|" Term } .
Term = Factor { Factor } .
Factor = production_name | token [ "…" token ] | Group | Option | Repetition .
Group = "(" Expression ")" .
Option = "[" Expression "]" .
Repetition = "{" Expression "}" .
Productions 是由术语(terms) 和以下运算符(operators)构建的表达式,优先级递增:
| alternation
() grouping
[] option (0 or 1 times)
{} repetition (0 to n times)
参考链接:
1、https://amturing.acm.org/award_winners/wirth_1025774.cfm
2、https://de-academic.com/dic.nsf/dewiki/1021428
3、https://dl.acm.org/doi/pdf/10.1145/359863.359883
4、https://zhuanlan.zhihu.com/p/676018344
5、https://en-academic.com/dic.nsf/enwiki/4522574
6、https://golang.google.cn/ref/spec#Notation
7、https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf