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)
							 |