57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
|  | """
 | ||
|  | GTSAM Copyright 2010-2020, Georgia Tech Research Corporation, | ||
|  | Atlanta, Georgia 30332-0415 | ||
|  | All Rights Reserved | ||
|  | 
 | ||
|  | See LICENSE for the license information | ||
|  | 
 | ||
|  | Rules and classes for parsing a module. | ||
|  | 
 | ||
|  | Author: Duy Nguyen Ta, Fan Jiang, Matthew Sklar, Varun Agrawal, and Frank Dellaert | ||
|  | """
 | ||
|  | 
 | ||
|  | # pylint: disable=unnecessary-lambda, unused-import, expression-not-assigned, no-else-return, protected-access, too-few-public-methods, too-many-arguments | ||
|  | 
 | ||
|  | from pyparsing import (ParseResults, ZeroOrMore,  # type: ignore | ||
|  |                        cppStyleComment, stringEnd) | ||
|  | 
 | ||
|  | from .classes import Class | ||
|  | from .declaration import ForwardDeclaration, Include | ||
|  | from .enum import Enum | ||
|  | from .function import GlobalFunction | ||
|  | from .namespace import Namespace | ||
|  | from .template import TypedefTemplateInstantiation | ||
|  | from .variable import Variable | ||
|  | 
 | ||
|  | 
 | ||
|  | class Module: | ||
|  |     """
 | ||
|  |     Module is just a global namespace. | ||
|  | 
 | ||
|  |     E.g. | ||
|  |     ``` | ||
|  |     namespace gtsam { | ||
|  |         ... | ||
|  |     } | ||
|  |     ``` | ||
|  |     """
 | ||
|  | 
 | ||
|  |     rule = ( | ||
|  |         ZeroOrMore(ForwardDeclaration.rule  # | ||
|  |                    ^ Include.rule  # | ||
|  |                    ^ Class.rule  # | ||
|  |                    ^ TypedefTemplateInstantiation.rule  # | ||
|  |                    ^ GlobalFunction.rule  # | ||
|  |                    ^ Enum.rule  # | ||
|  |                    ^ Variable.rule  # | ||
|  |                    ^ Namespace.rule  # | ||
|  |                    ).setParseAction(lambda t: Namespace('', t.asList())) + | ||
|  |         stringEnd) | ||
|  | 
 | ||
|  |     rule.ignore(cppStyleComment) | ||
|  | 
 | ||
|  |     @staticmethod | ||
|  |     def parseString(s: str) -> ParseResults: | ||
|  |         """Parse the source string and apply the rules.""" | ||
|  |         return Module.rule.parseString(s)[0] |