@startuml
'https://plantuml.com/class-diagram

top to bottom direction
hide circle
hide empty members
'hide empty methods
skinparam groupInheritance 3

note as N1
Class Diagram
---
<size 18>pyparsing 3.0.0
<size 18>October, 2021
end note

N1 <-[hidden]- unicode

package core {

class globals {
quoted_string
sgl_quoted_string
dbl_quoted_string
delimited_list()
counted_array()
match_previous_literal()
match_previous_expr()
one_of()
dict_of()
original_text_for()
ungroup()
nested_expr()
make_html_tags()
make_xml_tags()
common_html_entity
replace_html_entity()
class OpAssoc
infix_notation()
class IndentedBlock
c_style_comment
html_comment
rest_of_line
dbl_slash_comment
cpp_style_comment
java_style_comment
python_style_comment
match_only_at_col()
replace_with()
remove_quotes()
with_attribute()
with_class()
trace_parse_action()
condition_as_parse_action()
srange()
token_map()
autoname_elements()
}

class ParseResults {
class List
{static}from_dict()
__getitem__()
__setitem__()
__contains__()
__len__()
__bool__()
__iter__()
__reversed__()
__getattr__()
__add__()
__getstate__()
__setstate__()
__getnewargs__()
__dir__()
as_dict()
as_list()
dump()
get_name()
items()
keys()
values()
haskeys()
pop()
get()
insert()
append()
extend()
clear()
copy()
get_name()
pprint()
}

class ParseBaseException #ffffff {
{static} explain_exception()
explain()
mark_input_line()
line
lineno
column
parser_element
}
class ParseException
class ParseFatalException
class ParseSyntaxException

ParseBaseException <|-- ParseException
ParseBaseException <|-- ParseFatalException
ParseFatalException <|-- ParseSyntaxException

class ParserElement {
name: str
results_name: str
---
{classifier} enable_packrat()
{classifier} enable_left_recursion()
{classifier} disable_memoization()
{classifier} set_default_whitespace_chars()
{classifier} inline_literals_using()
{classifier} reset_cache()

{static} verbose_stacktrace

operator + () -> And
operator - () -> And.ErrorStop
operator | () -> MatchFirst
operator ^ () -> Or
operator & () -> Each
operator ~ () -> NotAny
operator [] () -> _MultipleMatch
add_condition()
add_parse_action()
set_parse_action()
copy()
ignore(expr)
leave_whitespace()
parse_with_tabs()
suppress()
set_break()
set_debug()
set_debug_actions()
set_name()
set_results_name()
parse_string()
scan_string()
search_string()
transform_string()
split()
run_tests()
create_diagram()
}
class Token #ffffff
class ParseExpression #ffffff {
exprs: list[ParserElement]
}
class ParseElementEnhance #ffffff {
expr: ParserElement
}
class _PositionToken  #ffffff
class Char
class Empty
class White
class Keyword {
{static} set_default_keyword_chars(chars: str)
}
class CaselessKeyword
class NoMatch
class Literal
class Regex
class Word {
'Word(init_chars: str, body_chars: str, min: int, \nmax: int, exact: int, as_keyword: bool, exclude_chars: str)
}
class CharsNotIn
class QuotedString

class And
class Or
class MatchFirst
class Each

class OneOrMore
class ZeroOrMore
class SkipTo
class Group
class Forward {
operator <<= ()
}

class LineStart
class LineEnd
class StringStart
class StringEnd
class WordStart
class WordEnd
class AtLineStart
class AtStringStart

class FollowedBy
class _MultipleMatch #ffffff
class PrecededBy
class Located
class Opt
class TokenConverter #ffffff

class Combine
class Group
class Dict
class Suppress

ParserElement <|-- Token
ParserElement <|----- ParseExpression
Token <|-- _PositionToken
ParserElement <|----- ParseElementEnhance

'ParseElementEnhance ---> ParserElement
'ParseExpression ---> "*" ParserElement


Token <|-- Empty
Token <|-- CloseMatch
Token <|--- NoMatch
Token <|---- Literal
Token <|---- Word
Token <|---- Keyword
Token <|--- Regex
Token <|--- CharsNotIn
Token <|--- White
Token <|---- QuotedString
Word <|-- Char
Literal <|-- CaselessLiteral
Keyword <|-- CaselessKeyword

ParseExpression <|-- And
ParseExpression <|-- Or
ParseExpression <|-- MatchFirst
ParseExpression <|-- Each

ParseElementEnhance <|-- SkipTo
ParseElementEnhance <|--- Forward
ParseElementEnhance <|-- Located
ParseElementEnhance <|--- _MultipleMatch
_MultipleMatch <|-- OneOrMore
_MultipleMatch <|-- ZeroOrMore
ParseElementEnhance <|-- NotAny
ParseElementEnhance <|-- FollowedBy
ParseElementEnhance <|-- PrecededBy
ParseElementEnhance <|-- Opt
ParseElementEnhance <|--- TokenConverter
ParseElementEnhance <|-- AtStringStart
ParseElementEnhance <|-- AtLineStart
TokenConverter <|-- Group
TokenConverter <|-- Dict
TokenConverter <|-- Suppress
TokenConverter <|-- Combine

_PositionToken <|-- LineStart
_PositionToken <|-- LineEnd
_PositionToken <|-- WordStart
_PositionToken <|-- WordEnd
_PositionToken <|-- StringStart
_PositionToken <|-- StringEnd

}

package common {
class " " {
comma_separated_list
convert_to_integer()
convert_to_float()
integer
hex_integer
signed_integer
fraction
mixed_integer
real
sci_real
number
fnumber
identifier
ipv4_address
ipv6_address
mac_address
convert_to_date()
convert_to_datetime()
iso8601_date
iso8601_datetime
uuid
strip_html_tags()
upcase_tokens()
downcase_tokens()
url
}

}
package unicode {
class unicode_set {
printables: str
alphas: str
nums: str
alphanums: str
identchars: str
identbodychars: str
}
class Latin1
class LatinA
class LatinB
class Cyrillic
class Chinese
class Thai
class Japanese {
class Kanji
class Hiragana
class Katakana
}
class Greek
class Hangul
class Arabic
class Devanagari
class Hebrew
unicode_set <|-- Latin1
unicode_set <|--- LatinA
unicode_set <|-- LatinB
unicode_set <|-- Greek
unicode_set <|--- Cyrillic
unicode_set <|--- Chinese
unicode_set <|--- Japanese
unicode_set <|--- Hangul
Chinese <|-- CJK
Japanese <|-- CJK
Hangul <|-- CJK
unicode_set <|-- Thai
unicode_set <|-- Arabic
unicode_set <|-- Hebrew
unicode_set <|--- Devanagari

}

ParserElement <-[hidden] ParseBaseException
'ParseBaseException <-[hidden] globals
'globals <-[hidden] ParserElement
CJK <-[hidden]-- common

@enduml