You are on page 1of 8

۳۹۶۱۳۱۶۱۰۴۸ ‫ﺪی‬-‫ﺣﺴﺎم اﻟﺪﯾﻦ ﺳﻌ‬

cpp ‫ﺮ ﻟﻐﻮی ﺑﺮای ز?ﺎن‬9‫ﻠ‬-‫ﺗﺤﻠ‬

import Cocoa

private var buffer = ["2","+","p","l","e","_","3"]

private var state = 0

func lexicalAnalayzer() {

var pointer = 0
var c : String

for _ in 0..<buffer.count {

switch state {

case 0:

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])>")
state = 1
pointer = pointer + 1

else 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
}

break

case 1: // another digit

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 = 1
}

if c == "." {

print("\(state) <symbol , \(c) >")


state = 2
pointer += 1
}

if c == "e" || c == "E" {
print("\(state) <symbol , E>")
pointer += 1
state = 4
}
else if // except E : it might be e or E

c == "a" || c == "b" || c == "c" || c == "d" || 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 == "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("<id , \(c)> ==========> ERROR")
pointer += 1
state = 7

}
else {
print("<ERROR>")
}

break

case 2 : // " . "

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 = 3
}
else {
print("ERROR")
}

break

case 3 :

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 = 3
}
if c == "e" || c == "E" {
print("\(state) <symbol , E>")
pointer += 1
state = 4
}

else if // except E : it might be power

c == "a" || c == "b" || c == "c" || c == "d" || 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 == "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("<id , \(c)> ==========> ERROR")
}

break
case 4: // + , -

c = buffer[pointer]

if c == "+" || c == "-" {
print("\(state) <symbol , \(c)>")
pointer += 1
state = 5

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
}

break
case 5:

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 {
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

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("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 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 = 7
}

else {
print("\(state) <ERROR>")
}

break
default:
break
}
}
}
lexicalAnalayzer()

You might also like