Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. # Syntaxkontroll
  2. import string
  3.  
  4.  
  5. class Node:
  6. def __init__(self, value=None, next=None):
  7. self.value = value # Håller ett värde för noden
  8. self.next = next # Sätter en pekare på vilken nod som är nästa
  9.  
  10. def __str__(self):
  11. return self.value # Returnerar värdet på noden
  12.  
  13.  
  14. class LinkedQ:
  15. def __init__(self):
  16. self.__first = None # Sätter en pekare på den första noden i kön
  17. self.__last = None # Sätter en pekare på den sista noden i kön
  18.  
  19. def enqueue(self, value): # Metod för att lägga till noder i kön
  20.  
  21. new_node = Node(value)
  22.  
  23. if self.isEmpty():
  24. self.__first = new_node
  25. self.__last = new_node
  26. else:
  27. self.__last.next = new_node # Den senaste noden pekar nu på den nya tillagda noden
  28. self.__last = new_node # Den nya tillagda noden tilldelas den sista platsen
  29.  
  30. def dequeue(self): # Metod för att ta ut den första noden i kön
  31. value = self.__first.value
  32. self.__first = self.__first.next # Sätter den som är efter till först i kön
  33. return value
  34.  
  35. def isEmpty(self): # Kollar om kön är tom
  36. return self.__first is None
  37.  
  38. def peek(self):
  39. peek = self.__first.next.value
  40. return peek
  41.  
  42. class Syntaxfel(Exception):
  43. pass
  44.  
  45.  
  46.  
  47. def LETTER(q):
  48. """
  49. :param letter: ett tecken
  50. :return: True or False
  51. """
  52. tecken = q.dequeue()
  53. ALPHABET = string.ascii_uppercase
  54.  
  55. if tecken.isupper() is True and tecken in ALPHABET:
  56. print(tecken)
  57. return
  58. raise Syntaxfel("Saknad stor bokstav")
  59.  
  60.  
  61.  
  62.  
  63. def letter(q):
  64. """
  65. Kollar om ett tecken är en liten bokstav och finns med i lilla engelska alfabetet
  66. :param letter: Ett tecken
  67. :return: True or False
  68. """
  69. tecken = q.dequeue()
  70. alphabet = string.ascii_lowercase
  71.  
  72. if tecken.islower() is True and tecken in alphabet:
  73. print(tecken)
  74. return
  75. raise Syntaxfel("Ska vara en stor bokstav")
  76.  
  77.  
  78. def num(q):
  79. """
  80. Kollar om ett tecken är ett nummer och större än 2
  81. :param q:
  82. :return:
  83. """
  84. next = q.peek()
  85.  
  86. number = q.dequeue()
  87.  
  88. if type(number) is int and number >= 2:
  89. print(number)
  90. # while type(next) is int and next >= 2:
  91. # if not q.isEmpty():
  92. # q.dequeue()
  93. # print(next)
  94. return
  95.  
  96. raise Syntaxfel("för litet tal vid radfel")
  97.  
  98.  
  99. def atom(q):
  100. """
  101. returnerar
  102. :param q:
  103. :return:
  104. """
  105. alphabet = alphabetmaker()
  106.  
  107. next = q.peek()
  108.  
  109. LETTER(q)
  110. if next in alphabet and next is not None:
  111. letter(q)
  112. return
  113. else:
  114. return
  115.  
  116. # if uppest.islower() is True:
  117. # letter(q)
  118. # else:
  119. # LETTER(q)
  120.  
  121. def molekyl(q):
  122. """
  123.  
  124. :param q: kön med värden
  125. :return:
  126. """
  127. # next = q.peek()
  128. # tecken = q.__first
  129. while not q.isEmpty():
  130. atom(q)
  131. num(q)
  132.  
  133.  
  134. def kollaomrätt():
  135.  
  136. q=LinkedQ()
  137. q.enqueue("A")
  138. q.enqueue("a")
  139. q.enqueue(4)
  140. q.enqueue("B")
  141. q.enqueue(7)
  142. q.enqueue("C")
  143. q.enqueue("c")
  144. q.enqueue(3)
  145. q.enqueue(3)
  146.  
  147. try:
  148. molekyl(q)
  149. print("Följer syntax")
  150. except Syntaxfel as fel:
  151. print(str(fel))
  152.  
  153. def alphabetmaker():
  154. alph =string.ascii_lowercase
  155. list=[]
  156. for i in alph:
  157. list.append(i)
  158. return list
  159.  
  160.  
  161. kollaomrätt()
  162.  
  163. #
  164. # def readMening(q):
  165. # readSats(q)
  166. # if q.peek() == ".":
  167. # q.dequeue()
  168. # else:
  169. # readKonj(q)
  170. # readMening(q)
  171. #
  172. #
  173. #
  174. # def readSats(q):
  175. # readSubj(q)
  176. # readPred(q)
  177. #
  178. # def readSubj(q):
  179. # word = q.dequeue()
  180. # if word == "JAG":
  181. # return
  182. # if word == "DU":
  183. # return
  184. # raise Grammatikfel("Fel subjekt: " + word)
  185. #
  186. # def readPred(q):
  187. # word = q.dequeue()
  188. # if word == "TROR":
  189. # return
  190. # if word == "VET":
  191. # return
  192. # raise Grammatikfel("Fel predikat: " + word)
  193. #
  194. # def readKonj(q):
  195. # word = q.dequeue()
  196. # if word == "ATT":
  197. # return
  198. # if word == "OCH":
  199. # return
  200. # raise Grammatikfel("Fel konjunktion: " + word)
  201. #
  202. # def printQueue(q):
  203. # while not q.isEmpty():
  204. # word = q.dequeue()
  205. # print(word, end = " ")
  206. # print()
  207. #
  208. # def storeSentence(mening):
  209. # q = WordQueue()
  210. # mening = mening.split()
  211. # for ordet in mening:
  212. # q.enqueue(ordet)
  213. # q.enqueue(".")
  214. # return q
  215. #
  216. #
  217. # def kollaGrammatiken(mening):
  218. # q = storeSentence(mening)
  219. #
  220. # try:
  221. # readMening(q)
  222. # return "Följer syntaxen!"
  223. # except Grammatikfel as fel:
  224. # return str(fel) + " före " + str(q)
  225. #
  226. # def main():
  227. # q = WordQueue()
  228. # mening = input("Skriv en mening: ")
  229. # resultat = kollaGrammatiken(mening)
  230. # print(resultat)
  231. #
  232. # if __name__ == "__main__":
  233. # main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement