56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
"""
 | 
						|
GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
 | 
						|
Atlanta, Georgia 30332-0415
 | 
						|
All Rights Reserved
 | 
						|
 | 
						|
See LICENSE for the license information
 | 
						|
 | 
						|
Parser classes and rules for parsing C++ variables.
 | 
						|
 | 
						|
Author: Varun Agrawal, Gerry Chen
 | 
						|
"""
 | 
						|
 | 
						|
from typing import List
 | 
						|
 | 
						|
from pyparsing import Optional, ParseResults  # type: ignore
 | 
						|
 | 
						|
from .tokens import DEFAULT_ARG, EQUAL, IDENT, SEMI_COLON
 | 
						|
from .type import TemplatedType, Type
 | 
						|
 | 
						|
 | 
						|
class Variable:
 | 
						|
    """
 | 
						|
    Rule to parse variables.
 | 
						|
    Variables are a combination of Type/TemplatedType and the variable identifier.
 | 
						|
 | 
						|
    E.g.
 | 
						|
    ```
 | 
						|
    class Hello {
 | 
						|
        string name;  // This is a property variable.
 | 
						|
    };
 | 
						|
 | 
						|
    Vector3 kGravity;  // This is a global variable.
 | 
						|
    ````
 | 
						|
    """
 | 
						|
    rule = ((Type.rule ^ TemplatedType.rule)("ctype")  #
 | 
						|
            + IDENT("name")  #
 | 
						|
            + Optional(EQUAL + DEFAULT_ARG)("default")  #
 | 
						|
            + SEMI_COLON  #
 | 
						|
            ).setParseAction(lambda t: Variable(
 | 
						|
                t.ctype,  #
 | 
						|
                t.name,  #
 | 
						|
                t.default[0] if isinstance(t.default, ParseResults) else None))
 | 
						|
 | 
						|
    def __init__(self,
 | 
						|
                 ctype: List[Type],
 | 
						|
                 name: str,
 | 
						|
                 default: ParseResults = None,
 | 
						|
                 parent=''):
 | 
						|
        self.ctype = ctype[0]  # ParseResult is a list
 | 
						|
        self.name = name
 | 
						|
        self.default = default
 | 
						|
        self.parent = parent
 | 
						|
 | 
						|
    def __repr__(self) -> str:
 | 
						|
        return '{} {}'.format(self.ctype.__repr__(), self.name)
 |