109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
"""
 | 
						|
GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
 | 
						|
Atlanta, Georgia 30332-0415
 | 
						|
All Rights Reserved
 | 
						|
 | 
						|
See LICENSE for the license information
 | 
						|
 | 
						|
All the token definitions.
 | 
						|
 | 
						|
Author: Duy Nguyen Ta, Fan Jiang, Matthew Sklar, Varun Agrawal, and Frank Dellaert
 | 
						|
"""
 | 
						|
 | 
						|
from pyparsing import Or  # type: ignore
 | 
						|
from pyparsing import (Keyword, Literal, OneOrMore, QuotedString, Suppress,
 | 
						|
                       Word, alphanums, alphas, nestedExpr, nums,
 | 
						|
                       originalTextFor, printables)
 | 
						|
 | 
						|
# rule for identifiers (e.g. variable names)
 | 
						|
IDENT = Word(alphas + '_', alphanums + '_') ^ Word(nums)
 | 
						|
 | 
						|
RAW_POINTER, SHARED_POINTER, REF = map(Literal, "@*&")
 | 
						|
 | 
						|
LPAREN, RPAREN, LBRACE, RBRACE, COLON, SEMI_COLON = map(Suppress, "(){}:;")
 | 
						|
LOPBRACK, ROPBRACK, COMMA, EQUAL = map(Suppress, "<>,=")
 | 
						|
DUNDER = Suppress(Literal("__"))
 | 
						|
 | 
						|
# Default argument passed to functions/methods.
 | 
						|
# Allow anything up to ',' or ';' except when they
 | 
						|
# appear inside matched expressions such as
 | 
						|
# (a, b) {c, b} "hello, world", templates, initializer lists, etc.
 | 
						|
DEFAULT_ARG = originalTextFor(
 | 
						|
    OneOrMore(
 | 
						|
        QuotedString('"') ^  # parse double quoted strings
 | 
						|
        QuotedString("'") ^  # parse single quoted strings
 | 
						|
        Word(printables, excludeChars="(){}[]<>,;") ^  # parse arbitrary words
 | 
						|
        nestedExpr(opener='(', closer=')') ^  # parse expression in parentheses
 | 
						|
        nestedExpr(opener='[', closer=']') ^  # parse expression in brackets
 | 
						|
        nestedExpr(opener='{', closer='}') ^  # parse expression in braces
 | 
						|
        nestedExpr(opener='<', closer='>')  # parse template expressions
 | 
						|
    ))
 | 
						|
 | 
						|
CONST, VIRTUAL, CLASS, STATIC, PAIR, TEMPLATE, TYPEDEF, INCLUDE = map(
 | 
						|
    Keyword,
 | 
						|
    [
 | 
						|
        "const",
 | 
						|
        "virtual",
 | 
						|
        "class",
 | 
						|
        "static",
 | 
						|
        "pair",
 | 
						|
        "template",
 | 
						|
        "typedef",
 | 
						|
        "#include",
 | 
						|
    ],
 | 
						|
)
 | 
						|
ENUM = Keyword("enum") ^ Keyword("enum class") ^ Keyword("enum struct")
 | 
						|
NAMESPACE = Keyword("namespace")
 | 
						|
BASIC_TYPES = map(
 | 
						|
    Keyword,
 | 
						|
    [
 | 
						|
        "void",
 | 
						|
        "bool",
 | 
						|
        "unsigned char",
 | 
						|
        "char",
 | 
						|
        "int",
 | 
						|
        "size_t",
 | 
						|
        "double",
 | 
						|
        "float",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
OPERATOR = Or(
 | 
						|
    map(
 | 
						|
        Literal,
 | 
						|
        [
 | 
						|
            '+',  # __add__, __pos__
 | 
						|
            '-',  # __sub__, __neg__
 | 
						|
            '*',  # __mul__
 | 
						|
            '/',  # __truediv__
 | 
						|
            '%',  # __mod__
 | 
						|
            '^',  # __xor__
 | 
						|
            '&',  # __and__
 | 
						|
            '|',  # __or__
 | 
						|
            # '~',  # __invert__
 | 
						|
            '+=',  # __iadd__
 | 
						|
            '-=',  # __isub__
 | 
						|
            '*=',  # __imul__
 | 
						|
            '/=',  # __itruediv__
 | 
						|
            '%=',  # __imod__
 | 
						|
            '^=',  # __ixor__
 | 
						|
            '&=',  # __iand__
 | 
						|
            '|=',  # __ior__
 | 
						|
            '<<',  # __lshift__
 | 
						|
            '<<=',  # __ilshift__
 | 
						|
            '>>',  # __rshift__
 | 
						|
            '>>=',  # __irshift__
 | 
						|
            '==',  # __eq__
 | 
						|
            '!=',  # __ne__
 | 
						|
            '<',  # __lt__
 | 
						|
            '>',  # __gt__
 | 
						|
            '<=',  # __le__
 | 
						|
            '>=',  # __ge__
 | 
						|
            # '!',  # Use `not` in python
 | 
						|
            # '&&',  # Use `and` in python
 | 
						|
            # '||',  # Use `or` in python
 | 
						|
            '()',  # __call__
 | 
						|
            '[]',  # __getitem__
 | 
						|
        ],
 | 
						|
    ))
 |