gtsam/wrap/gtwrap/interface_parser/tokens.py

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, 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__
],
))