SHARE
TWEET

Untitled

a guest Mar 19th, 2019 51 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top