Guest User

Untitled

a guest
Apr 17th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.10 KB | None | 0 0
  1. import ply.lex as lex
  2. import ply.yacc as yacc
  3. tokens = ['VOWEL','CONSONANT']
  4.  
  5. t_VOWEL = r'[AEIOUaeiou]'
  6. t_CONSONANT = r'[A-Za-z]'
  7.  
  8. def t_error(token):
  9.     print(f'Illegal character: {token.value} on line number {t.lineno}')
  10.     token.lexer.skip(1)
  11.  
  12. def t_whitespace(t):
  13.     r'\s+'
  14.     pass
  15.  
  16. lexer = lex.lex()
  17.  
  18. tokens_generated = []
  19.  
  20. def p_expression(p):
  21.     '''
  22.     expression : vowel_list consonant_list
  23.     '''
  24.    
  25.     print(dir(p.lexer))
  26.     print(p.stack)
  27.     print('Derivation complete!')
  28.     print(f'The tokens generated are: {tokens_generated}')
  29.  
  30.  
  31. def p_vowel_list(p):
  32.     '''
  33.     vowel_list : VOWEL vowel_list
  34.                 | VOWEL
  35.     '''
  36.     print(f'Derived the vowel {p[1]} !')
  37.     tokens_generated.append(p[1])
  38.  
  39. def p_consonant_list(p):
  40.     '''
  41.     consonant_list : CONSONANT consonant_list
  42.                     | CONSONANT
  43.     '''
  44.     print(f'Derived the consonant {p[1]}!')
  45.     tokens_generated.append(p[1])
  46.  
  47.  
  48. def p_error(p):
  49.     if p == None:
  50.         token = "end of file"
  51.     else:
  52.         token = f"{p.type}({p.value}) on line {p.lineno}"
  53.  
  54. input_string = 'EUAIOTNC'
  55.  
  56. parser = yacc.yacc(method='LALR',debug=True)
  57. parser.parse(input_string)
Add Comment
Please, Sign In to add comment