Skip to content
Snippets Groups Projects
mp_code_expressions.py 1.90 KiB
from PyQt5.QtCore import QRegularExpression
# root names
ROOT_NAME_EXPRESSION = QRegularExpression(r"^\s*ROOT\s*(\w*)\s*:")

# composite names
COMPOSITE_NAME_EXPRESSION = QRegularExpression(r"^\s*(\w*)\s*:")

# schema names
SCHEMA_NAME_EXPRESSION = QRegularExpression(r"^\s*SCHEMA\s*(\w*)")


# atomic names are all words
ATOMIC_NAME_EXPRESSION = QRegularExpression(r"\b\w*\b")

# multiline comment expressions
COMMENT_START_EXPRESSION = QRegularExpression("/\\*")
COMMENT_END_EXPRESSION = QRegularExpression("\\*/")

# keywords, ref. MP documentation
_KEYWORDS = "ADD|AFTER|ALL|AND|APPLY|AT|ATTRIBUTES|AVG|BEFORE|BUILD|CHAIN|CHECK|CONTAINS|COORDINATE|CUT_END|CUT_FRONT|DIAGRAM|DISJ|DO|ELSE|ENCLOSING|ENSURE|EXISTS|FI|FIRST|FOLLOWS|FOREACH|FROM|IF|IN|IS|LAST|LEAST|MAP|MARK|MAX|MAY_OVERLAP|MIN|NOT|OD|ON|ONFAIL|OR|PRECEDES|REJECT|REVERSE|ROOT|SAY|SCHEMA|SET|SHARE|SHIFT_LEFT|SHIFT_RIGHT|SORT|SUCH|SUM|THAT|THEN|THIS|TIMES|WHEN"
KEYWORD_SET = set(_KEYWORDS.split('|'))
KEYWORD_EXPRESSION = QRegularExpression(r'\b(%s)\b'%_KEYWORDS)

# words
WORD_EXPRESSION = QRegularExpression("\\b\\w*")

# meta-symbols
META_SYMBOL_EXPRESSION = QRegularExpression(r'\$\$(EVENT|ROOT|COMPOSITE|ATOM|scope)')

# operators, any of: -+*=<>!(){}|
OPERATOR_EXPRESSION = QRegularExpression("[-+\/*=<>!\(\)\{\}\|]+")

# numbers
NUMBER_EXPRESSION = QRegularExpression(r'[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?')

# variables
VARIABLE_EXPRESSION = QRegularExpression("(<.*>)?\$[a-z][a-z0-9_]*")

# Double-quoted string, possibly containing escape sequences
QUOTED_TEXT_EXPRESSION = QRegularExpression(r'"[^"\\]*(\\.[^"\\]*)*"')

# brace, bracket IF, DO
PAREN_EXPRESSION = QRegularExpression("[\(\)]")   # "(" or ")"
BRACE_EXPRESSION = QRegularExpression("[\{\}]")   # "{" or "}"
BRACKET_EXPRESSION = QRegularExpression("[\[\]]")   # "[" or "]"
IF_EXPRESSION = QRegularExpression("\\b(IF|FI)\\b") # IF or FI
DO_EXPRESSION = QRegularExpression("\\b(DO|OD)\\b") # DO or OD