파스칼과 같은 함수 선언을 본문으로 파싱하는 방법 (및 가능한이) 정규식은 무엇입니까? 좀 정규 표현식 기능 만 프로토 타입을 (이 댓글이없는 경우에만 작동하므로 해석하기 전에 내가 분명히 댓글) 풀 수 본문으로 파스칼과 같은 함수 선언을 파싱하는 regexp를 작성하는 방법은 무엇입니까?
function\s+(\w+)(\(((((var\s*)?(\w+)(\s*\,+\s*)?)+?\s*\:\s*(\w+)\s*\;?\s*?)\s*)+\))?\s*\:\s*(\w+)
을 만들었습니다와 나는 그것을 풀 수 있도록 변경하는 방법을 몰라 시체와 기능. 문제는 "begin - end"블록이 많아서 끝나는 기능을 찾기가 어렵습니다.
컴퓨터 이론의 정규 표현식은 이러한 구문을 지원하지 않습니다. 그러나 많은 RegEx 구현에는 이러한 일치를 지원하는 특별한 기능이 있다고 생각합니다. 균형 잡힌 그룹이라고 불리는 것 같습니다. 개인적으로 나는 여전히 그런 문법을위한 깨끗한 파서를 쓰는 것을 선호한다. – CodesInChaos
@CodeInChaos 많은 RE 구현이 이론적 한계를 넘어서는 것은 당연하지만 RE 이론이 제공하는 성능 보장을 포기해야합니다 (cf. http://swtch.com/~rsc/regexp/regexp1.html 참조).). 예를 들어, Perl은 컨텍스트 프리 구조를 인식하는 구조를 제공합니다. 더 깔끔한 접근법은 파싱과 스캐닝을 통합하는 루아의 LPeg 프레임 워크입니다. 기능적 언어는 파서 결합자를 사용하여 동일한 효과를 낼 수 있습니다. 이 같은 것을 사용할 수 없다면, 파서를 명시 적으로 사용하는 것이 좋습니다. –