文法分为:
无限制文法、上下文相关文法、上下文无关文法、正则文法
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