2012-04-01 2 views
2

도메인 특정 언어를 사용하고 있으며 그 언어에 대한 정적 분석을 수행하여 훌륭한 그래프를 만들고 싶습니다. 누군가가 이것을하기 위해 행동 계획을 추천 할 수 있다면 감사하게 생각하십시오. 조건 패스 또는 도메인 특정 언어에 대한 정적 분석 수행

  • run_and_branch 실패하면 언어에

    도메인 언어

    { 
        run_and_branch(ULSDCompHash) 
        then 
        { 
         run(DownComponent_Reset); 
         run(DownComponent_Reset2); 
    
        } 
        else 
        { 
         run(ULSD_EndOfTest); 
        } 
        run(ULSD_EndOfTest2); 
    
    
    }, closed,"EMCSETUP","" 
    

    세부

    • 실행 상관하지 않는 것입니다 같은 경우 - 다른 사람, 만약 통과 또는 실패한 종류의 것
    • () 내의 값은 이름 노드의

    예상 출력 (실행 그래프에서 DFS 경우)

    ULSDCompHash -> DownComponent_Reset -> DownComponent_Reset2 -> ULSD_EndOfTest2 
    ULSDCompHash -> ULSD_EndOfTest -> ULSD_EndOfTest2 
    
  • +0

    정확히 어떤 종류의 그래프를 만들고 싶습니까? 제어 흐름 그래프? 그리고 일반 텍스트 표현의 유물입니까 아니면 두 개의 코드 경로에서 발생하는 것에 대해 별도의 노드가 있어야합니까? – delnan

    +1

    모든 가능한 경로를 얻기 위해 DFS 탐색을 수행 할 수 있도록 필자가 생각하는 제어 흐름 그래프가 적절합니다. 그래프는 일반 텍스트 표현을 모방해야합니다. 그래서 내 예제에서는 하나의 노드 ULSDCompHash 하나 OutComponent_Reset 및 ULSD_EndofTest 다른 가장자리가 있습니다. – tabiul

    +0

    주위에 더 많은 검색 작업을 수행 한 후 첫 번째 단계는 소스 코드에 대한 AST 트리를 만들고 변환합니다 제어 흐름 그래프. AST를 CFG로 변환하는 방법에 대한 단계별 설명과 같은 좋은 소스를 찾을 수 없습니다 – tabiul

    답변

    1

    대부분의 컴파일러 책은 제어 흐름 그래프를 생성하는 방법에 대한 매우 자세한 설명이 포함되어 있습니다.

    Java 프로그램 용으로 SO answer as to how to crawl an AST to produce a CFG을 제공했지만 대답은 다소 일반적인 것입니다.

    +0

    고마워요. 제가 확인하겠습니다 – tabiul

    관련 문제