EBNF 表示 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]):

语言参考 -> 复合语句 -> 函数定义有这个:

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

文档中的语法并不总是与用于生成解析器的语法相同。 (后者的可读性可能较差。 甚至解析器语法也可能不完整,因为某些约束仅在编译时强制执行。 上面的一个并没有完全捕获约束,即一旦给定默认值,所有后续位置参数都必须具有默认值。参数列表的生产似乎可能存在其他问题。

通过删除装饰器、注释和所有"*"内容来简化,但添加约束,主要使用您的样式,并忽略最终尾随逗号是可选的问题,导致

def id '(' (id,)*

(id=val,)* ')' :

必须用文字 () 括起来以区别于分组 ()。

最新更新