You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
18 KiB
304 lines
18 KiB
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!-- ==========================================================================\
|
|
|
|
|
| To learn how to make your own language parser, please check the following
|
|
| link:
|
|
| https://npp-user-manual.org/docs/function-list/
|
|
|
|
|
\=========================================================================== -->
|
|
<NotepadPlus>
|
|
<functionList>
|
|
<!-- ========================================================= [ C++ ] -->
|
|
<parser
|
|
displayName="C++"
|
|
id ="cplusplus_syntax"
|
|
commentExpr="(?s:/\*.*?\*/)|(?m-s://.*?$)"
|
|
>
|
|
<classRange
|
|
mainExpr="(?x) # use inline comments
|
|
^[\t\x20]* # leading whitespace
|
|
(template\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
(class|struct) # class/struct definition keyword
|
|
[\t\x20]+ # following whitespace
|
|
((\w+|\[\[[^\r\n]*\]\])[\t\x20]+)* # type attributes
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # class/struct identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
(\s*final\s*)? # final specifier
|
|
(
|
|
\s*:\s* # inheritance separator
|
|
((private|protected|public|virtual)\s+)* # visibility/virtual specifier
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # parent class/struct identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
(
|
|
\s*,\s* # multiple inheritance separator
|
|
((private|protected|public|virtual)\s+)* # visibility/virtual specifier
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # parent class/struct identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
)*
|
|
)?
|
|
\s* # trailing whitespace
|
|
\{ # class/struct body
|
|
"
|
|
openSymbole ="\{"
|
|
closeSymbole="\}"
|
|
>
|
|
<className>
|
|
<nameExpr
|
|
expr="(?x) # use inline comments
|
|
(class|struct) # class/struct definition keyword
|
|
[\t\x20]+ # following whitespace
|
|
((\w+|\[\[[^\r\n]*\]\])[\t\x20]+)* # type attributes
|
|
(\w+\s*::\s*)* # namespace specifier
|
|
\w+ # class/struct identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
(\s*final\s*)? # final specifier
|
|
\s* # trailing whitespace
|
|
(:\s*\w+|\{) # inheritance separator | class/struct body
|
|
"
|
|
/>
|
|
<nameExpr
|
|
expr="(?x) # use inline comments
|
|
(\w+\s*::\s*)* # namespace specifier
|
|
\w+ # class/struct identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
(\s*final\s*)? # final specifier
|
|
\s* # trailing whitespace
|
|
(:\s*\w+|\{) # inheritance separator | class/struct body
|
|
"
|
|
/>
|
|
<nameExpr
|
|
expr="(?x) # use inline comments
|
|
(\w+\s*::\s*)* # namespace specifier
|
|
\w+ # class/struct identifier
|
|
"
|
|
/>
|
|
</className>
|
|
<function
|
|
mainExpr="(?x) # use inline comments
|
|
^[\t\x20]* # leading whitespace
|
|
(template\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
((consteval|constexpr|explicit|friend|inline|static|virtual)\s+)* # left function definition keywords
|
|
(
|
|
( # conversion operator definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
operator\s+ # operator keyword
|
|
((const|long|signed|unsigned|volatile)\s+)* # type definition keyword
|
|
( # operator type definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # operator type identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
)*
|
|
(\s*(\*|\*\*|&)\s*)? # type pointer/reference
|
|
)
|
|
| (
|
|
((const|long|signed|unsigned|volatile)\s+)* # type definition keyword
|
|
( # return type definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # return type identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
)
|
|
( # type pointer/reference
|
|
\s+
|
|
| (\*|\*\*|&)\s+
|
|
| \s+(\*|\*\*|&)
|
|
| \s+(\*|\*\*|&)\s+
|
|
)
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
(
|
|
( # function definition
|
|
(?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
| ( # operator definition
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol
|
|
)
|
|
)
|
|
)
|
|
)
|
|
\s* # following whitespace
|
|
\(
|
|
[^\)\(]* # function parameters
|
|
(\([^\)\(]*\)[^\)\(]*)* # functors as parameter
|
|
\)
|
|
(\s*(const|final|noexcept|override|volatile)\s*)* # right function definition keywords
|
|
\s* # trailing whitespace
|
|
\{ # function body
|
|
"
|
|
>
|
|
<functionName>
|
|
<funcNameExpr
|
|
expr="(?x) # use inline comments
|
|
(
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\w\t\x20\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol | conversion operator
|
|
| (?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
\s* # following whitespace
|
|
\( # function parameters
|
|
"
|
|
/>
|
|
<funcNameExpr
|
|
expr="(?x) # use inline comments
|
|
(
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\w\t\x20\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol | conversion operator
|
|
| (?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
"
|
|
/>
|
|
</functionName>
|
|
</function>
|
|
</classRange>
|
|
<function
|
|
mainExpr="(?x) # use inline comments
|
|
^[\t\x20]* # leading whitespace
|
|
(template\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
((consteval|constexpr|explicit|friend|inline|static|virtual)\s+)* # left function definition keywords
|
|
(
|
|
( # conversion operator definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
operator\s+ # operator keyword
|
|
((const|long|signed|unsigned|volatile)\s+)* # type definition keyword
|
|
( # operator type definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # operator type identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
)*
|
|
(\s*(\*|\*\*|&)\s*)? # type pointer/reference
|
|
)
|
|
| (
|
|
((const|long|signed|unsigned|volatile)\s+)* # type definition keyword
|
|
( # return type definition
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
\w+ # return type identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
)
|
|
( # type pointer/reference
|
|
\s+
|
|
| (\*|\*\*|&)\s+
|
|
| \s+(\*|\*\*|&)
|
|
| \s+(\*|\*\*|&)\s+
|
|
)
|
|
(
|
|
\w+ # namespace identifier
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,<>]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
)*
|
|
(
|
|
( # function definition
|
|
(?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
| ( # operator definition
|
|
operator\(\) # operator parenthesis
|
|
| operator # operator keyword
|
|
[\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol
|
|
)
|
|
)
|
|
)
|
|
)
|
|
\s* # following whitespace
|
|
\(
|
|
[^\)\(]* # function parameters
|
|
(\([^\)\(]*\)[^\)\(]*)* # functors as parameter
|
|
\)
|
|
(\s*(const|final|noexcept|override|volatile)\s*)* # right function definition keywords
|
|
\s* # trailing whitespace
|
|
\{ # function body
|
|
"
|
|
>
|
|
<functionName>
|
|
<nameExpr
|
|
expr="(?x) # use inline comments
|
|
(
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\w\t\x20\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol | conversion operator
|
|
| (?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
\s* # following whitespace
|
|
\( # function parameters
|
|
"
|
|
/>
|
|
<nameExpr
|
|
expr="(?x) # use inline comments
|
|
(
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\w\t\x20\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol | conversion operator
|
|
| (?!(if|while|for|switch)\s*\() # exclude block/loop definition
|
|
\w+ # function identifier
|
|
)
|
|
"
|
|
/>
|
|
</functionName>
|
|
<className>
|
|
<nameExpr expr="(?x) # use inline comments
|
|
\w+ # namespace identifier
|
|
(?=
|
|
(\s*<\s*[\w\t\x20\(\)\=\.:,]*\s*>\s*)? # template parameters
|
|
\s*::\s* # namespace separator
|
|
(
|
|
operator\(\) # parenthesis operator
|
|
| operator # operator keyword
|
|
[\w\t\x20\[\]\*\=\+\-\~\|\^%!,&<>]+ # operator symbol | conversion operator
|
|
| \w+ # function identifier
|
|
)
|
|
\( # function parameters
|
|
)
|
|
" />
|
|
</className>
|
|
</function>
|
|
</parser>
|
|
</functionList>
|
|
</NotepadPlus> |