I am trying PLY for sentence validation. I take a simple grammar rule.
Sentence -> nouns verbsnouns -> r'[A-Za-z]'verbs -> is|are|am|.. When I just set verbs to is|am or am i.e. I keep my choices to detect atmost two types of verbs, PLY throws an error.
My code is
import ply.lex as leximport ply.yacc as yacctokens = ['WORDS','VERBS']def t_WORDS(t): r'[A-Za-z]+' passdef t_VERBS(t): r'(is|are|am)' pass t_ignore = ' \t\n'def t_error(t): print('Lexical error') t.lexer.skip(1)def p_sentence(p):'sentence : WORDS VERBS' p[0] = p[1] + p[2]def p_error(p): print("Error")lexer = lex.lex()parser = yacc.yacc()while True: sentence = input("Sentence : ") result = parser.parse(sentence) print(result)But when I write
import ply.lex as leximport ply.yacc as yacctokens = ['WORDS','VERBS']def t_WORDS(t): r'[A-Za-z]+' passdef t_VERBS(t): r'(is|are)' pass t_ignore = ' \t\n'def t_error(t): print('Lexical error') t.lexer.skip(1)def p_sentence(p):'sentence : WORDS VERBS' p[0] = p[1] + p[2]def p_error(p): print("Error")lexer = lex.lex()parser = yacc.yacc()while True: sentence = input("Sentence : ") result = parser.parse(sentence) print(result)The error occurs. I have taken example 'This are' as a sentence. This works fine when is|are|am are defined but not for is|are.
What have I done wrong?