def t_FIELD(t): r"\w+(?=\s*:)" try: type = keywords_dict[t.value] except KeyError: raise ParseError("Unrecognized keyword: %r" % (t.value, ), t) else: t.type = type if type in line_keywords: t_begin_insidestring(t) elif type in multilines_keywords: # FIXME: we differentiate between top Description (accepting multiline) # and description within flag block (where we cannot currently accept # multilines). if t.lexpos >= 1: if R_NEWLINE.match(t.lexer.lexdata[t.lexpos - 1]): t_begin_insidemstring(t) else: t_begin_insidestring(t) else: t_begin_insidemstring(t) elif type in comma_line_keywords: t_begin_inside_scommalistfirstline(t) elif type in comma_word_keywords: t_begin_inside_wcommalistfirstline(t) else: t_begin_inside_word(t) return t
def p_error(p): if p is None: raise InternalBentoError( "Unknown parsing error (parser/lexer bug ? Please report this with your bento.info)" ) else: msg = "yacc: Syntax error at line %d, Token(%s, %r)" % \ (p.lineno, p.type, p.value) if hasattr(p.lexer, "lexdata"): data = p.lexer.lexdata.splitlines() msg += "\n\t%r" % (data[p.lineno - 1], ) raise ParseError(msg, p)
def p_error(p): if p is None: raise InternalBentoError( "Unknown parsing error (parser/lexer bug ? Please report this with your bento.info)" ) else: msg = "yacc: Syntax error at line %d, Token(%s, %r)" % \ (p.lineno, p.type, p.value) if hasattr(p.lexer, "lexdata"): raw_data = p.lexer.lexdata data = raw_data.splitlines() line_lexpos = sum(len(line) + 1 for line in data[:p.lineno - 1]) inline_lexpos = p.lexpos - line_lexpos msg += "\n%s" % (data[p.lineno - 1], ) msg += "\n%s" % (" " * inline_lexpos + "^", ) raise ParseError(msg, p)
def t_insidescommalistfirstline_error(t): raise ParseError( "Illegal character (inside scommalistfirstline state) '%s'" % t.value[0], t)
def t_insidewcommalist_error(t): raise ParseError( "Illegal character (inside wcommalist state) '%s'" % t.value[0], t)
def t_insidemstringnotcontinued_error(t): raise ParseError( "Illegal character (inside_mstringnotcontinued state) '%s'" % t.value[0], t)
def t_insidemstring_error(t): raise ParseError( "Illegal character (insidemstring state) '%s'" % t.value[0], t)
def t_insideword_error(t): raise ParseError("Illegal character (inside word state) '%s'" % t.value[0], t)
def t_error(t): raise ParseError("Illegal character '%s'" % t.value[0], t)