python 中函数的 EBNF
EBNF for a function in python
我是 python 的新手,想知道如何为函数编写 ebnf。
我做了以下-
id ⇐ definition of legal function/variable name
val ⇐ definition of legal int value
use
def, comma, parentheses, and colon
这是我所做的,但我认为它不正确:
def id([id=val,id=val]):
Language Reference -> Compound statements -> Function definitions
有这个:
funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
| "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier
文档中的语法并不总是与用于生成解析器的语法相同。 (后者可能不太可读。)甚至解析器语法也可能不完整,因为某些约束仅在编译时强制执行。上面的那个并没有完全捕捉到一旦给出默认值,所有后续位置参数都必须具有默认值的约束。 parameter list 的制作好像还有其他问题
通过删除装饰器、注释和所有“*”的东西来简化,但添加约束,主要使用您的风格,并忽略最后的尾随逗号是可选的问题,导致
def id '(' (id,)* (id=val,)* ')' :
(必须用引号将文字 () 与分组 () 区分开来。)
我是 python 的新手,想知道如何为函数编写 ebnf。 我做了以下-
id ⇐ definition of legal function/variable name
val ⇐ definition of legal int value
use
def, comma, parentheses, and colon
这是我所做的,但我认为它不正确:
def id([id=val,id=val]):
Language Reference -> Compound statements -> Function definitions 有这个:
funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= (defparameter ",")*
| "*" [parameter] ("," defparameter)* ["," "**" parameter]
| "**" parameter
| defparameter [","] )
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier
文档中的语法并不总是与用于生成解析器的语法相同。 (后者可能不太可读。)甚至解析器语法也可能不完整,因为某些约束仅在编译时强制执行。上面的那个并没有完全捕捉到一旦给出默认值,所有后续位置参数都必须具有默认值的约束。 parameter list 的制作好像还有其他问题
通过删除装饰器、注释和所有“*”的东西来简化,但添加约束,主要使用您的风格,并忽略最后的尾随逗号是可选的问题,导致
def id '(' (id,)* (id=val,)* ')' :
(必须用引号将文字 () 与分组 () 区分开来。)