BNF范式
<> :用左右尖括号括起来的成分表示语法构造成分,或称语法单位,为非终结符。
:该符号的左部由右部定义。
[] :表示方括号内的成分为任选项。
() :表示圆括号内的成分优先。
| :或
scheme
<S表达式><原子>|(<S表达式><SPACE><S表达式>)
<SPACE>" "
<原子><数字原子>|<符号原子>
<数字原子>[+|-]<无符号定点数>|[+|-]<无符号浮点数>|<逻辑数>
<无符号定点数><数字>|<数字><无符号定点数>
<数字>
<无符号浮点数><数字><余浮点数>|.<十进制小数>|e<指数部分>
<余浮点数><数字><余浮点数>|.<十进制小数>|e<指数部分>|
<十进制小数><数字><余十进制小数>
<余十进制小数>e<指数部分>|<数字><余十进制小数>|
<指数部分><数字><余整指数>|[+|-]<整指数>
<整指数><数字><余整指数>
<余整指数><数字><余整指数>|
<逻辑数>#T|()
<符号原子>(<字母>|<无()的特殊符号>)|(<字母><无()的特殊符号>)<无()的任意符号>
<无()的任意符号><数字>|<字母>|<无()的特殊符号>
函数
<S表达式><原始函数>|<构造函数>|<谓词函数>|<输出函数>|<控制流程>
<原始函数><算术函数>|<求值函数>|<禁止求值函数>|<原始链表构造器>|<原始链表选择器>
<算术函数>‘('<算术运算符>|SQRT
<算术运算符>
<求值函数>'('EVAL
<禁止求值函数>'('QUOTE|
<原始链表构造器>'('CONS|LIST
<原始链表选择器>'('CAR|CDR
<参数列表><参数>|<参数><SPACE><参数列表>
<参数>QUOTE|'|<S表达式>
<构造函数><lambda函数>|<自定义函数>
<lambda函数>'('[<符号名>]'('lambda'('<参数列表>')'<S表达式>')'')'
<符号名><符号原子>
<自定义函数>'('define
<函数体><S表达式>
<谓词函数>'('<关系运算符><SPACE><S表达式>')'
<关系运算符>eq?|null?|list?|eqv?|equal?|=|<|>|<=|>=|even?|odd?|zero?
<输出函数>'('display
<控制流程><双向选择><多向选择>
<双向选择>'('if
<then表达式><S表达式>
<else表达式><S表达式>
<多向选择>'('cond<选择对>['('else
<选择对>'('<谓词函数>
reference
[1]布辉,刘冉.LISP语言的特点及其文法的BNF描述[J].福建电脑,2006(10):83-84.