현재 코드 블록의 모든 자식이 같은 레벨에있는 AST를 사용하는 컴파일러가 있습니다 (즉, block.children == {stm1, stm2, stm3 , 등 ...}). 이 트리에서 liveness 분석을하려고합니다. 즉, stm1의 처리에서 반환 된 값을 가져 와서 stm2에 전달한 다음 stm2에서 반환 한 값을 가져 와서 stm3에 전달하는 등의 작업을 수행해야합니다. AST가 이런 방식으로 구성되어있을 때 이러한 방식으로 하위 규칙을 실행하는 방법은 없습니다.한 번에 하나의 자식 ANTLR AST 처리하기
주어진 문법 검사 항목으로 하위 문법 항목의 실행을 체인화 할 수있는 방법이 있습니까, 아니면 구문 분석기를 리팩터링하여 중첩 구조를 생성하고 나머지를 업데이트하는 힘든 과정을 거쳐야 할 것입니다. 컴파일러에서 새로운 AST와 함께 작업 할 수 있습니까?
예 ANTLR 문법 조각 :
block
: ^(BLOCK statement*)
;
statement
: // stuff
;
난에 가야하지 않았 으면 무엇 :
block
: ^(BLOCK statementList)
;
statementList
: ^(StmLst statement statement+)
| ^(StmLst statement)
;
statement
: // stuff
;
정말 고마워요. 그게 내가 필요한 것입니다. –
잘 듣고 반갑습니다. 천만에요. –