107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			107 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 (Keyword, Literal, OneOrMore, Or,  # type: ignore
							 | 
						||
| 
								 | 
							
								                       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, "<>,=")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# 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")
							 | 
						||
| 
								 | 
							
								BASIS_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__
							 | 
						||
| 
								 | 
							
								        ],
							 | 
						||
| 
								 | 
							
								    ))
							 |