파이썬은 좋은 스크립팅 언어입니다. 심지어 당신이 그것을 자신의 파서와 컴파일러에 액세스 할 수 있습니다. 그것은 또한 당신이 XML 문자열 템플릿 같은 특별한 목적을 위해 다른 다른 파서에 액세스 할 수 있습니다.
그러나 때때로 당신은 당신의 자신의 파서를 할 수 있습니다. 이에 대한 pyPEG을 무엇이다.
무슨 일이 일어나고 있는지에를 빨리 보려면, 내 블로그에 pyPEG와 XML로 임의의 언어를 분석하는 방법에 대한이 문서를 참조하십시오.
PEG는 무엇입니까?
PEG는 구문 분석 식 문법을 의미한다. 그것은 문맥 자유 언어에 대한 정규 표현식의 생각처럼 뭔가; 당신이 PEG에 대한 위키 백과의 문서에서 찾을 수 있습니다 매우 명확한 설명.
쐐기는 BNF와 같이 동일한 언어를 설명 할 수 있습니다 (그리고 그들은 심지어 비슷한 것).
파서 - 통역은 무엇입니까?
일반 파서는 구문 분석 된 PEG 및 하향식를 사용하지만, LR (N) 또는 LL (N)과 상향식 (bottom-up) 구문 분석되지 않습니다. 이 파서 생성기를 구현하는 생각을 초래한다.
LR (N) 또는 LL (n)를 파서 먼저 DFA를 계산해야하기 때문에, 일반적으로 파서 생성기 당신을 위해이 작업을 수행 할 수 있습니다. 결과는 입력 된 사용자의 BNF 문법위한 파서 구현이다. 하나는 파서 구현 파서 생성기를 BNF에서 컴파일러를 호출 할 수 있습니다.
파서 인터프리터 대신 같은 컴파일러 인의 통역 작업을 수행합니다. 다만 입력으로 문법을주고, 그 텍스트에서 설명 언어를 파싱한다. 생성 된 어떤 프로그램이 없습니다.
pyPEG 사용
그 의미 : 사용 pyPEG은 매우 간단합니다;-) 당신은 이미 정규 표현식을 알고 있다면, 당신은 신속하게 pyPEG를 사용하는 방법을 배우게됩니다.
작은 샘플
예 :이 같은 간단한 언어의 생각 :
함수 FAK (N) {
& NBSP; 경우 (N == 0) {// 0! 정의 1
& NBSP; 1을 반환;
& NBSP;} 다른 {
& NBSP; 반환 n 개의 *의 FAK (N - 1);
& NBSP;};
}
해당 언어의 pyPEG (또한 샘플 스크립트를 참조) 다음 코드처럼 보이는 :
데프 코멘트 () : 복귀 [re.compile (R "//.*"), re.compile ( "/*.*?*/", re.S)]
데프 문자 () : 반환 re.compile ( ".? *"r'd * .D * | | D + ')
데프 기호 () : 반환 re.compile (R "+ w")
데프 연산자 () : 반환 re.compile (R "+ | - | * | / | ==")
데프 동작 () : 리턴 기호, 연산자, [문자, functioncall]
데프 식 () : 복귀 [문자, 운영, functioncall]
데프있는 expressionlist () : 반환 식, -1, ( ","표현)
데프 returnstatement () : 리턴 키워드 ( "반환"), 식
데프 ifstatement () : 리턴 키워드 ( "만약") ( "다른"), "(", 표현, ")", 블록, 키워드, 블록
데프 문 () : 복귀 [ifstatement, returnstatement] ";"
DEF 블록 () : 반환 "{", -2, 문, "}"
데프하는 ParameterList () : 반환 "(", 기호, -1, ( ",", 기호), ")"
데프 functioncall () : "(",,있는 expressionlist을 ")", 기호를 반환
DEF 기능 () : 리턴 키워드 ( "기능"), 기호,하는 ParameterList, 블록
데프 simpleLanguage () : 리턴 기능
이 릴리스의 새로운 기능입니다 :
이이 정리 자료입니다. 구문 분석 코드 ()와 구성 ()가 수정되었습니다.
이 버전 1.4의 새로운 기능 :
이 버전은 모아 구문 분석과 몇 가지 버그를 해결합니다.
이 버전 1.3의 새로운 기능 :
이 공정하게 호환되지만 컴파일러 백엔드에서 더 설명 코드를 지원하는 기호 (목록) 클래스에 의해 pyAST의 이름 튜플 교체 너무.
이 1.2 버전의 새로운 기능 :
오류 처리에서 유니 코드 버그가 수정되었습니다.
이 버전 1.1의 새로운 기능 :
유니 코드 지원이 추가되었습니다.
버전 0.46의 새로운 기능 :
이 pyPEG.print_trace True로.
지금 파이썬 3.x를에 pyPEG 변환 원활 2to3를 사용하여 작품
임의로 설정하여 추적 될 수있다 적용되는 문법 규칙
출력은 표준 에러이 추적 pyPEG 것입니다.
버전 0.45의 새로운 기능 :
이 버그 수정.
버전 0.44의 새로운 기능 :
이 pyPEG 이제 소스 파일 이름과 줄 번호와 함께 pyAST 개체를 장식합니다.
이 요구 사항 :
이 파이썬
댓글을 찾을 수 없습니다