문제

LUA 스크립트를로드하고 이러한 스크립트를 수정하여 일부 사용자 정의를 허용하는 폐쇄 소스 응용 프로그램을 사용하고 있습니다. 불행히도 그 응용 프로그램은 LUA 스크립트 중 하나에서 무언가 잘못된 경우 유용한 로그 출력을 생성하는 데별로 잘 작동하지 않습니다 ( '스크립트 실패').

동적 언어는 예를 들어 C ++ 코드를 분석 할 수있는 방식으로 정적 코드 분석에 거의 저항력이 있음을 알고 있습니다.

그래도 LUA 스크립트를 통해 실행되는 도구가있을 것이며 예를 들어 특정 스크립트의 맥락에서 정의되지 않은 변수에 대해 경고합니다.

본질적으로 내가 찾고있는 것은 스크립트를위한 도구입니다.

local a
print b

출력 :

warning: script.lua(1): local 'a' is not used'
warning: script.lua(2): 'b' may not be defined'

그것은 대부분의 것들에 대해서만 경고 일 수 있지만 여전히 유용 할 것입니다! 그러한 도구가 존재합니까? 아니면 그 빌드와 같은 기능이있는 lua ide?

고마워요, 크리스

도움이 되었습니까?

해결책

LUA에 대한 자동 정적 코드 분석은 일반적으로 쉬운 일이 아닙니다. 그러나 제한된 실용적인 문제의 경우 상당히 가능합니다.

빠른 "Lua Lint"에 대한 인터넷 검색 이 두 가지 도구를 생성합니다. 루아-체커 그리고 루아 보풀.

그러나 특정 요구를 위해 자신의 도구를 굴릴 수 있습니다.

Metalua 정적 LUA 코드 분석을위한 가장 강력한 도구 중 하나입니다. 예를 들어, 참조하십시오 Metalint, 글로벌 가변 사용 분석 도구.

주저하지 말고 질문을 게시하십시오 Metalua 메일 링리스트. 사람들은 일반적으로 매우 도움이됩니다.

다른 팁

도 있습니다 Lua-Inspect, 이미 언급 된 Metalua를 기반으로합니다. 나는 그것을 통합했다 Zerobrane Studio Ide, 이는 기대하는 것과 매우 유사한 출력을 생성합니다. 자세한 내용은 답변을 참조하십시오. https://stackoverflow.com/a/11789348/1442917.

글로벌 점검은 참조하십시오 이 lua-l 게시. 현지인을 점검하는 것이 더 어렵습니다.

LUA 용 구식 파서 (오픈 소스로 제공해야 함)를 찾아서 스크립트를 적절한 AST 트리에 구문 분석하는 데 사용해야합니다. 변수가 정의되지 않았거나 정의되지 않은시기를 찾으려면 해당 트리와 간단한 변수 가시성 추적기를 사용하십시오.

일반적으로 범위 규칙은 간단합니다.

  • 상단 AST 노드와 빈 범위로 시작합니다.
  • 항목 해당 노드의 자식 문장을보십시오. 모든 변수 선언은 현재 범위에 추가되어야합니다.
  • 새 범위가 시작된 경우 (예 : {연산자)를 통해 현재 범위에서 변수를 상속하는 새 변수 범위를 만듭니다).
  • 범위가 끝나는 경우 (예 : via}) 현재 아동 가변 범위를 제거하고 부모로 돌아갑니다.
  • 조심스럽게 반복하십시오.

이렇게하면 AST 내부의 위치가 보이는 변수가 제공됩니다. 이 정보를 사용할 수 있으며 표현식 AST 노드 (변수 읽기/쓰기)를 검사하면 정보를 찾을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top