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