2015-01-17 4 views
1

python에 익숙하지 않으며 함수에 ebnf를 작성하는 방법을 알고 싶습니다. 나는이 내가 한 일이지만, 내가 생각하지 않는 다음과 같은 -파이썬에서 함수에 대한 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]): 
+0

당신이 당신의 입력을 완료 했습니까 (()의이 (그룹화에서 그들을 구별하기 위해 인용해야 함)의 문자 적.) 질문? –

+0

예 Ryne 질문입니다. 함수에 EBNF를 쓸 수 있습니까? –

+0

[The Python Language Reference] (htt ps : //docs.python.org/3/reference/index.html)? 그것은 모두 거기에 있어야합니다. – 5gon12eder

답변

2

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 

문법에 의사가 파서를 생성하는 데 사용 된 것과 항상 같지는 않습니다. 후자는 읽기가 어려울 수 있습니다. 컴파일 할 때 일부 제약 조건 만 적용되므로 구문 분석기 문법도 불완전 할 수 있습니다. 위의 예는 일단 기본값이 주어지면 모든 후속 위치 매개 변수에 기본값이 있어야한다는 제약 조건을 포착하지 않습니다. 매개 변수 목록의 제작에는 다른 문제가있는 것처럼 보입니다. '

데프 ID 결과, 물건,하지만 대부분 자신의 스타일을 사용하여 제약 조건을 추가하고 옵션 인 최종, 후행 쉼표의 문제를 무시하고'

장식, 주석을 제거하여 단순화하고, 모든 "* ('(ID) * (ID = 발) *') ':