述べたように、これは単純な間違いであると確信していますが、明示的に文字列 'F1' に設定されている場合、変数 newState が次の else 条件をトリガーしない理由を理解するのに苦労しています: if newState == 'F1'...
それほど多くのコードを移植する必要はなかったと思います。申し訳ありません。
(EOL, LETTER, DIGIT, PERIOD, ILLEGAL_CHAR, LEGAL_CHAR) = range(0, 6)
STT = [ ['error', 1, 2, 0, 'error', 0], ['F1', 1, 1, 'F1', 'error', 'F1' ],
['F2', 'F2', 2, 3, 'error', 'F2'], ['error', 'error', 4, 'error', 'error', 'error'],
['F3', 'F3', 4, 'F3', 'error', 'F3'] ]
for line in open("Sample.txt","r"):
x1 = ''
currState = 0
newState = 'F1'
for char in line:
if newState != 'F1' or newState != 'F2' or newState != 'F3' or newState != 'error':
currState = newState
#If eol
if char == '\n':
response = EOL
newState = STT[currState][response]
break
#if letter
elif char.isalpha():
x1 = x1 + char
response = LETTER
newState = STT[currState][response]
# break
#if Digit
elif char.isdigit():
x1 = x1 + char
response = DIGIT
newState = STT[currState][response]
#if Period
elif char == '.':
x1 = x1 + char
response = PERIOD
newState = STT[currState][response]
#If illegal char set
elif (char == '~' or char == '?' or char == ':' or char == '_' or char == '\\' ):
response = ILLEGAL_CHAR
newState = STT[currState][response]
break
# elif x1 != '':
#response = 5
# newState = STT[currState][response]
# break
#if any other legal char
else:
response = LEGAL_CHAR
newState = STT[currState][response]
#We have a token
else:
getToken(newState, x1)