文法分为:
无限制文法、上下文相关文法、上下文无关文法、正则文法
BNF 巴科斯诺尔范式是一种用于表示上下文无关文法的语言 ,一类形式语言
BNF规定是推导规则(产生式)的集合 表示为 : 符号 ::= <使用符号的表达式>
终结符 是指一个形式语言的基本符号 不能被分解为更小的单位,产生式的组合必须完全由终结符组成
非终结符 是可以被替代的符号
< > : 内包含的为必选项。 [ ] : 内包含的为可选项。 { } : 内包含的为可重复0至无数次的项。 | : 表示在其左右两边任选一项,相当于"OR"的意思。 ::= : 是“被定义为”的意思 "..." : 术语符号 [...] : 选项,最多出现一次 {...} : 重复项,任意次数,包括 0 次 (...) : 分组 | : 并列选项,只能选一个
ABNF 是对bnf 的扩充 写为
规则 = 定义 ; 注释 CR LF
更多参考 https://www.jianshu.com/p/15efcb0c06c8
abnf表示四则运算
Expr = Term *Sum ; 继续绕圈子, *Sum 有或者没有, 先写求和是有原因的 Term = Factor *Mul ; 再写乘积, *Sum 不匹配, 就尝试乘积 Sum = SumOp Term ; 求和的运算, 有运算符必定要有后续表达式 Mul = MulOp Factor ; 乘积的运算, Factor = Num / ; 引向终结 "(" Expr ")" ; 括号永远都在 Num = 1*(0-9) ; 数字, 这可以是独立的终结符 SumOp = "+" / "-" ; 加或者减, 可以叫做求和, 小技巧 MulOp = "*" / "/" ; 乘或者除, 可以叫做乘积
更多参考 https://wizardforcel.gitbooks.io/go-blog-in-action/Chapter07.html