import sys
import string
def Extract_RightSide_From_FileLines( FileLines ) :
RightSideList = []
for eachline in FileLines :
if( IsExistOnlyOneEqual( eachline ) == True ) :
RightSideValue = RightSideOfEqual( eachline )
RightSideList.append( RightSideValue )
return RightSideList
def Extract_LeftSide_From_FileLines( FileLines ) :
LeftSideList = []
for eachline in FileLines :
if( IsExistOnlyOneEqual( eachline ) == True ) :
LeftSideValue = LeftSideOfEqual( eachline )
LeftSideList.append( LeftSideValue )
return LeftSideList
def IsExistOnlyOneEqual( strLine ) :
strLine = RemoveLuaComment( strLine )
find_pos = strLine.find( '=', 0 )
if( find_pos == -1 ) :
return False
find_pos = strLine.find( '=', find_pos + 1 )
if( find_pos == -1 ) :
return True
return False
def RemoveLuaComment( strLine ) :
find_pos = strLine.find( '--', 0 )
if( find_pos != -1 ) :
return strLine[0 : find_pos].strip()
return strLine.strip()
def LeftSideOfEqual( strLine ) :
strLine = RemoveLuaComment( strLine )
find_pos = strLine.find( '=', 0 )
if( find_pos != -1 ) :
return strLine[0 : find_pos].strip()
return strLine.strip()
def RightSideOfEqual( strLine ) :
strLine = RemoveLuaComment( strLine )
find_pos = strLine.find( '=', 0 )
if( find_pos != -1 ) :
return strLine[find_pos + 1 : len(strLine)].strip()
return strLine.strip()
def Extract_Alparbet_Number_UnderBar( strLine ) :
strAlparbet_Number_UnderBar = string.letters + string.digits + '_'
strList = []
for OneWord in strLine :
if( OneWord in strAlparbet_Number_UnderBar ) :
strList.append( OneWord )
strTemp = ''.join( strList )
return strTemp
def RefTypeMaching( strStartKeyword, nLineNumber, strSourceLine, strRefTypeList ) :
strSourceTempList = strSourceLine.split()
for eachSource in strSourceTempList :
strExtractedSource = Extract_Alparbet_Number_UnderBar( eachSource )
if( strExtractedSource.startswith( strStartKeyword ) == True ) :
if( strExtractedSource not in strRefTypeList ) :
print 'RefType Mismatch. LineNumber : ' + str( nLineNumber ) + ', Source String : ' + strExtractedSource
def main(argv) :
Reference_file = argv[1]
Programed_file = argv[2]
# Reference File Loading(RefTypeList)
Ref_fstream = open( Reference_file, 'r' )
RefFileList = Ref_fstream.xreadlines()
RefTypeList = Extract_LeftSide_From_FileLines( RefFileList )
Ref_fstream.close()
# Programed File Loading(ProgramFileList)
Programed_fstream = open( Programed_file, 'r' )
ProgramFileList = Programed_fstream.readlines()
Programed_fstream.close()
# Print Type Check
print '---------------------------------------------------------'
print 'Start Type Check. File Name : ' + str( argv[2] )
print '---------------------------------------------------------'
for i, eachProgramLine in enumerate( ProgramFileList ) :
strRemovedComment = RemoveLuaComment( eachProgramLine )
RefTypeMaching( 'Item_', i + 1, strRemovedComment, RefTypeList )
print '---------------------------------------------------------'
if __name__ == "__main__" :
main(argv=sys.argv)
[Python] Lua Reference Type Checker
프로그래밍/Python
2010/02/11 16:56
글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다
덧글을 달아 주세요