여름 프로젝트로 언어와 컴파일러를 작성하려고합니다. 구문 분석 트리 또는 BNF/EBNF를 사용하는 방법에 대한 정보를 찾는 데 어려움을 겪고 있습니다. 작성자를 프로그램하십시오. 전반적인 목표는 단순화 된 함수 언어 구문을 c로 구문 분석하는 컴파일러를 작성하는 것입니다. 나는 현재이 컴파일러를 C 언어로 작성하려고 계획하고 있지만 누군가가 더 좋은 아이디어라고 생각한다면 뭔가 다른 것을 시도해도 괜찮을 것입니다. (LEX와 같은 도구를 사용하지 않고 손으로 이것을하고 싶습니다.)
예를 들어 언어 ADD
을 만들고 구문을 (+ 3 4)
으로 정의하고 싶다면 EBNF를 쉽게 생성 할 수 있습니다.함수 언어 컴파일러를 만드는 방법
Program -> {Function}
Function -> Operator Integer Integer
Operator -> +
Integer -> Digit {Digit}
Digit -> 0|1|2|3|4|5|6|7|8|9
과는 파스 트리 만들기 위해 더 쉽게이다 : 그러나
Function
|
-------------------
| | |
Operator Integer Integer
어떻게 것 당신 :
- 유효한 C 코드를 내가 아주 간단한 동작하는 예제를 볼 수 있다면 나를 올바른 방향으로 시작하는 데 충분하다고 느낄
를 얻을 수
Dragon Book
을 읽으라고 권하고 싶습니다. 그래서 이미 주문되어 배송 중임을 알려드립니다. 빛에 대해 미리 알려 주셔서 감사합니다.
용 책에서 촬영 -vikingsheepman
당신은 맞습니다. C는 트리를 표현하고 트리 변형을 수행하는 이상적인 언어는 아닙니다. 대수 데이터 형식 지원 및 패턴 일치를 사용하는 언어를 사용하는 것이 좋습니다. 특히 함수형 언어를 구현하는 방법은 다음과 같습니다. http://research.microsoft.com/en-us/um/people/simonpj/Papers/pj-lester-book/ –
LL을 처리하는 "재귀 적 파서 (recursive descent parser)"를 검색하는 것이 좋습니다 1) 문법 (대부분의 언어에서는 충분했지만 예를 들어 현재의 C++이나 C#은 좀 더 복잡합니다). C에서 샘플 구현은 http://en.wikipedia.org/wiki/Recursive_descent_parser에 나와 있습니다. 다른 종류의 (일반적으로 생성 된) 파서와 비교하면 실제로 소스 코드에서 읽을 수 있습니다. –
@jJ 코드 스 니펫이 내가 찾고있는 코드 조각이었습니다! 감사! – vikingsheepman