commonparses method
You don't have to merge like this
return { ...currentCommon, your Def
: bla bla bla}
just give your own lib common parse rules
=> { your Def
: bla bla bla }
currentCommon is for you to check what have been loaded if Needed.
Implementation
@override
Map<String, List<Parse>> commonparses(
Map<String, List<Parse>>? currentCommon) {
return {
'string_literal': [
// Raw strings.
Parse(r'r"""([\w\W]*?)"""', Token.StringDouble),
Parse(r"r'''([\w\W]*?)'''", Token.StringSingle),
Parse(r'r"(.*?)"', Token.StringDouble),
Parse(r"r'(.*?)'", Token.StringSingle),
// Normal Strings.
Parse(r'"""', Token.StringDouble, ['string_double_multiline']),
Parse(r"'''", Token.StringSingle, ['string_single_multiline']),
Parse(r'"', Token.StringDouble, ['string_double']),
Parse(r"'", Token.StringSingle, ['string_single'])
],
'string_common': [
Parse(
r"\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]*\}|[a-z'"
r'"$\\])',
Token.StringEscape),
Parse.bygroups(
r'(\$)([a-zA-Z_]\w*)', [Token.StringInterpol, Token.Name]),
Parse.bygroups(r'(\$\{)(.*?)(\})', [
Token.StringInterpol,
Token.RecurseSameLexer,
Token.StringInterpol,
])
],
'string_double': [
Parse(r'"', Token.StringDouble, [POP2]),
Parse(r'[^"$\\\n]+', Token.StringDouble),
Parse.include('string_common'),
Parse(r'\$+', Token.StringDouble)
],
'string_double_multiline': [
Parse(r'"""', Token.StringDouble, [POP2]),
Parse(r'[^"$\\]+', Token.StringDouble),
Parse.include('string_common'),
Parse(r'(\$|\")+', Token.StringDouble)
],
'string_single': [
Parse(r"'", Token.StringSingle, [POP2]),
Parse(r"[^'$\\\n]+", Token.StringSingle),
Parse.include('string_common'),
Parse(r'\$+', Token.StringSingle)
],
'string_single_multiline': [
Parse(r"'''", Token.StringSingle, [POP2]),
Parse(r"[^'$\\]+", Token.StringSingle),
Parse.include('string_common'),
Parse(r"(\$|\')+", Token.StringSingle)
],
INCLUDE_IMPORT_NAMES_AND: [
Parse(r'[a-zA-Z_$]\w*', Token.Name),
Parse.bygroups(
r'(\s*)(\,)(\s*)', [Token.Text, Token.Punctuation, Token.Text]),
Parse(r'\s+', Token.Text, [POP]),
],
IMPORT_NAMES_AND: [
Parse.include(INCLUDE_IMPORT_NAMES_AND),
Parse.empty([POP])
],
IMPORT_NAMES_AND_OREND: [
Parse.include(INCLUDE_IMPORT_NAMES_AND),
Parse.include(IMPORT_NAME_END),
],
IMPORT_NAME_AND: [
Parse(r'[a-zA-Z_$]\w*', Token.Name),
Parse(r'\s+', Token.Text, [POP]),
Parse.empty([POP])
],
IMPORT_NAME_END: [
Parse.bygroups(r'([a-zA-Z_$]\w*)' r'(\s*)(\;)',
[Token.Name, Token.Text, Token.Punctuation],
/// 此处需要修改退栈逻辑(根据情况退栈) 解决共用结束规则的问题
[ONPOP('pop->root', ELSE: POPROOT)]),
Parse.empty([POP])
],
REQUIRED_NAME_END: [
Parse.bygroups(r'([a-zA-Z_$]\w*)' r'(\s*)(\;)',
[Token.Name, Token.Text, Token.Punctuation], [POP])
],
};
}