2 GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
3 Atlanta, Georgia 30332-0415
6 See LICENSE for the license information
8 Classes and rules for parsing C++ templates and typedefs for template instantiations.
10 Author: Duy Nguyen Ta, Fan Jiang, Matthew Sklar, Varun Agrawal, and Frank Dellaert
13 from typing
import List
15 from pyparsing
import Optional, ParseResults, delimitedList
17 from .tokens
import (EQUAL, IDENT, LBRACE, LOPBRACK, RBRACE, ROPBRACK,
18 SEMI_COLON, TEMPLATE, TYPEDEF)
19 from .type
import TemplatedType, Typename
24 Rule to parse templated values in the interface file.
27 template<POSE> // this is the Template.
32 Rule to parse the template parameters.
34 template<typename POSE> // POSE is the Instantiation.
41 + ((delimitedList(TemplatedType.rule ^ Typename.rule)
45 t.typename, t.instantiations))
47 def __init__(self, typename: str, instantiations: ParseResults):
52 for inst
in instantiations:
54 TemplatedType)
else inst
60 + delimitedList(TypenameAndInstantiations.rule)(
61 "typename_and_instantiations_list")
64 lambda t:
Template(t.typename_and_instantiations_list.asList()))
68 typename_and_instantiations_list: List[TypenameAndInstantiations]):
69 ti_list = typename_and_instantiations_list
70 self.
typenames = [ti.typename
for ti
in ti_list]
79 Rule for parsing typedefs (with templates) within the interface file.
83 typedef SuperComplexName<Arg1, Arg2, Arg3> EasierName;
86 rule = (TYPEDEF + TemplatedType.rule(
"templated_type") +
89 t.templated_type[0], t.new_name))
92 templated_type: TemplatedType,
95 self.
typename = templated_type.typename
100 return "Typedef: {new_name} = {typename}".
format(