2017-11-03 11 views
-1

제 언어를위한 작은 컴파일러를 만들려고합니다. 필자는 flex와 bison을 사용하여 lexer와 parser를 이미 작성했지만 파서에서는 타입 검사 등을 위해 사용법을 모르기 때문에 의미 론적 액션을 사용하지 않았습니다. 의미 분석기에 대해 읽었습니다. 구문 분석기를 사용하여 의미 분석을 수행하기 위해 수행해야 할 단계가 무엇인지 알고 싶습니다. NODE, AST 등을 만들 필요가 있습니까? 그렇다면 어떤 방법으로 제안합니까?flex와 bison : 파서에 의미 작업을 추가하는 방법은 무엇입니까?

답변

0

기본 bison 파서는 부울 응답 만 제공합니다 (예 또는 아니요). 입력이 문법에 설명 된 언어와 일치합니다. 그 이상을 원한다면 (예를 들어 어쨌든 언어로 설명 된 프로그램을 컴파일하는 것과 같이), 의미 론적 액션을 추가해야합니다.

들소의 의미 론적 액션은 매우 유연합니다. 원하는 모든 것을 할 수있는 임의의 코드 비트입니다. 따라서 프로그램의 목표가 무엇이든간에 목표 달성을 위해 이러한 행동에서 무엇을하고 싶은지 결정해야합니다.

바이슨 의미 론적 액션의 일반적인 개념은 관련 규칙이 축소 될 때 파서가 각 액션을 실행하므로 규칙이 축소 될 때 인식되는 규칙에 대한 응답을 수행하도록 액션을 설정할 수 있다는 것입니다. 따라서 감소 된 규칙의 '의미'를 평가하여 효과를 산출하거나 나중에 처리하기 위해 편리한 형식으로 AST 조각을 생성 할 수 있습니다. 규칙 동작은 이전에 축소 된 규칙 동작의 결과에 상향식으로 액세스 할 수 있습니다. 당신이하는 일은 당신이 원하는 것에 달려 있습니다.