Professional Documents
Culture Documents
import Cocoa
func lexicalAnalayzer() {
var pointer = 0
var c : String
for _ in 0..<buffer.count {
switch state {
case 0:
c = buffer[pointer]
break
c = buffer[pointer]
if c == "." {
if c == "e" || c == "E" {
print("\(state) <symbol , E>")
pointer += 1
state = 4
}
else if // except E : it might be e or E
}
else {
print("<ERROR>")
}
break
c = buffer[pointer]
break
case 3 :
c = buffer[pointer]
break
case 4: // + , -
c = buffer[pointer]
if c == "+" || c == "-" {
print("\(state) <symbol , \(c)>")
pointer += 1
state = 5
break
case 5:
c = buffer[pointer]
else {
print("ERROR")
}
break
case 6:
c = buffer[pointer]
if c == "0" || c == "1" || c == "2" || c == "3" || c == "4"
|| c == "5" ||
c == "6" || c == "7" || c == "8" || c == "9"
{
print("\(state) <number , integer value
\(buffer[pointer])>")
pointer += 1
state = 6
}
else if
{
print("error")
}else{
print("not defined")
}
break
case 7:
c = buffer[pointer]
if c == "a" || c == "b" || c == "c" || c == "d" || c == "e"
|| c == "f" ||
c == "g" || c == "h" || c == "i" || c == "j" || c == "k" ||
c == "l" ||
c == "m" || c == "n" || c == "o" || c == "p" || c == "q" ||
c == "r" ||
c == "s" || c == "t" || c == "u" || c == "v" || c == "w" ||
c == "x" ||
c == "y" || c == "z" || c == "A" || c == "B" || c == "C" ||
c == "D" ||
c == "E" || c == "F" || c == "G" || c == "H" || c == "I" ||
c == "J" ||
c == "K" || c == "L" || c == "M" || c == "N" || c == "O" ||
c == "P" ||
c == "Q" || c == "R" || c == "S" || c == "T" || c == "U" ||
c == "V" ||
c == "W" || c == "X" || c == "Y" || c == "Z" || c == "_"
{
print("\(state) <id , \(c)>")
pointer += 1
state = 7
}
else {
print("\(state) <ERROR>")
}
break
default:
break
}
}
}
lexicalAnalayzer()