Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ply.lex as lex
- import ply.yacc as yacc
- tokens = ['VOWEL','CONSONANT']
- t_VOWEL = r'[AEIOUaeiou]'
- t_CONSONANT = r'[A-Za-z]'
- def t_error(token):
- print(f'Illegal character: {token.value} on line number {t.lineno}')
- token.lexer.skip(1)
- def t_whitespace(t):
- r'\s+'
- pass
- lexer = lex.lex()
- tokens_generated = []
- def p_expression(p):
- '''
- expression : vowel_list consonant_list
- '''
- print(dir(p.lexer))
- print(p.stack)
- print('Derivation complete!')
- print(f'The tokens generated are: {tokens_generated}')
- def p_vowel_list(p):
- '''
- vowel_list : VOWEL vowel_list
- | VOWEL
- '''
- print(f'Derived the vowel {p[1]} !')
- tokens_generated.append(p[1])
- def p_consonant_list(p):
- '''
- consonant_list : CONSONANT consonant_list
- | CONSONANT
- '''
- print(f'Derived the consonant {p[1]}!')
- tokens_generated.append(p[1])
- def p_error(p):
- if p == None:
- token = "end of file"
- else:
- token = f"{p.type}({p.value}) on line {p.lineno}"
- input_string = 'EUAIOTNC'
- parser = yacc.yacc(method='LALR',debug=True)
- parser.parse(input_string)
Add Comment
Please, Sign In to add comment