Source code for tt.errors.grammar

"""Exception type definitions related to expression grammar and parsing."""

from .base import TtError


[docs]class GrammarError(TtError): """Base type for errors that occur in the handling of expression. This exception type should be sub-classed and is not meant to be raised explicitly. """
[docs] def __init__(self, message, expr_str=None, error_pos=None, *args): self._expr_str = expr_str self._error_pos = error_pos super(GrammarError, self).__init__(message, *args)
@property def expr_str(self): """The expression in which the exception occurred. If this property is left as ``None``, the expression will not be propagated with the exception. :type: :class:`str <python:str>` """ return self._expr_str @property def error_pos(self): """The position in the expression where the error occurred. If this property is left as ``None``, it can be assumed that there is no specific location in the expression causing the exception. :type: :class:`int <python:int>` """ return self._error_pos
[docs]class BadParenPositionError(GrammarError): """An exception type for unexpected parentheses. Here's a quick and dirty example:: >>> from tt import BooleanExpression >>> b = BooleanExpression('A or B (') Traceback (most recent call last): ... tt.errors.grammar.BadParenPositionError: Unexpected parenthesis """
[docs]class EmptyExpressionError(GrammarError): """An exception type for when an empty expression is received. Let's take a brief look:: >>> from tt import BooleanExpression >>> b = BooleanExpression('') Traceback (most recent call last): ... tt.errors.grammar.EmptyExpressionError: Empty expression is invalid """
[docs]class ExpressionOrderError(GrammarError): """An exception type for unexpected operands or operators. Here's an example with an unexpected operator:: >>> from tt import BooleanExpression >>> b = BooleanExpression('A or or B') Traceback (most recent call last): ... tt.errors.grammar.ExpressionOrderError: Unexpected binary operator "or" """
[docs]class InvalidIdentifierError(GrammarError): """An exception type for invalid operand names. Invalid operand names are determined via the :func:`is_valid_identifier \ <tt.definitions.operands.is_valid_identifier>` function. Here are a couple of examples, for both expressions and tables:: >>> from tt import BooleanExpression, TruthTable >>> b = BooleanExpression('__A xor B') Traceback (most recent call last): ... tt.errors.grammar.InvalidIdentifierError: Invalid operand name "__A" >>> t = TruthTable(from_values='0x11', ordering=['for', 'operand']) Traceback (most recent call last): ... tt.errors.grammar.InvalidIdentifierError: "for" in ordering is not a \ valid symbol name """
[docs]class UnbalancedParenError(GrammarError): """An exception type for unbalanced parentheses. Here's a short example:: >>> from tt import BooleanExpression >>> b = BooleanExpression('A or B or C)') Traceback (most recent call last): ... tt.errors.grammar.UnbalancedParenError: Unbalanced parenthesis """