상속 된 속성을 bison/yacc에 어떻게 사용할 수 있습니까? .; stmts {$$ 다음 = newLabel() :
프로그램 : -
프로그램 -> 내가 들소에하고 싶었다 무엇 bison/yacc의 상속 된 속성
말은,이 같은 문법이 $ 1.next = $$. 다음; }
다음은 구조체에서 선언 된 속성이며 해당 유형이 공용체에 추가됩니다.
상속 된 속성을 bison/yacc에 어떻게 사용할 수 있습니까? .; stmts {$$ 다음 = newLabel() :
프로그램 : -
프로그램 -> 내가 들소에하고 싶었다 무엇 bison/yacc의 상속 된 속성
다음은 구조체에서 선언 된 속성이며 해당 유형이 공용체에 추가됩니다.
때때로 상향식 파싱 중에 하향식 트래버스를 시뮬레이트하기 위해 mid-rule actions을 사용할 수 있지만 가장 깨끗하고 유연한 접근 방식은 초기 구문 분석 후 AST의 특성을 채우는 것입니다. 필요한.
btyacc에서 당신은 사용할 수 있습니다
program: stmts(newLabel()) { $$.next = $1.next; }
stmts($arg) : .... { $$.next = $arg; ... }
는 이런 종류의 작업을 수행 할 수 있습니다. bison (또는 yacc) 형식으로
program: { $<tag>$ = newLabel()); } stmts { $$.next = $1.next; }
stmts: .... { $$.next = $<tag>0; ... }
과 동일하지만보다 안전합니다. 두 경우 모두 올바른 %union
및 %type
선언이 필요합니다.