thom17 / ClangParserProject

0 stars 0 forks source link

SrcName에 대하여 #5

Closed thom17 closed 5 months ago

thom17 commented 5 months ago

Clang을 통한 srcName 처리 이력

1. Best는 clangCursor.displayname으로 시그니처를 처리 (가장 간단)

2. 파일의 시그니처 부분을 직접 읽어서 파싱

따라서 clangCursor.get_definition()을 사용하기로 함.

따라서 cpp 측은 기본적으로 헤더를 포함하니까 항상 get_definition를 호출하여 이를 기준으로 OMS 맵핑, 즉 srcName을 매핑하기로 함.

thom17 commented 5 months ago

get_definition의 동작 원리는 node.referenced 를 기반으로 완성된 body를 찾아가는 것 같다. Expr과 같은 어떠한 메서드를 호출하는 경우 호출하는 메서드에 대한 선언 식 (헤더)가 referenced에 등록된다. 이를 get_definition 을 호출 할 경우 찾아지는 경우에 원본의 node.get_definifition이 동작한다.

'node->ref->def == node->def'

허나 항상 ref가 헤더 def가 cpp 인 건 아니다. (ref 가 cpp인 경우 확인함. 아마도 동일 파일 코드나 cpp 인라인 함수?)

무튼 이로서 call 관계 정보 개선을 위해서는 ref를 반영해야하며 이는 메서드의 시그니쳐 정규화가 필요하다. (추후에 oms 를 통해 업데이트 하면 그만이니까)

thom17 commented 5 months ago

SrcName 관련하여 에러가 발생 SrcName 관련 하여 전체적인 태스트 진행 jupyter/all_node_test.ipynb

이 문제는 커밋 내용에서 진행 중

thom17 commented 5 months ago

하나의 Node에 대하여

is_def = node.is_definition
is_dec = node.klind.is_declaration
if is_def:
    assert is_dec, "Definition Node이면서 dec 노드가 아닐 수 는 없다."
thom17 commented 5 months ago

Token을 사용하여 head와 cpp의 시그니쳐 통일

문자+문자 사이는 공백 기호가 조합된 경우 붙여서 출력 (문자+기호 / 기호+기호) 하나의 Argment가 완료된후 ", " 추가 기본 값 정보는 없음

이로서 완성되지 않은 (get_definifition)으로 추적할 수 없는 노드도 src_name은 추적이 가능해짐. To do : 다음 할일은 이미 생성된 노드에 대하여 갱신 기능 필요