Grammar railroad diagram
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 599
- Forks
- 97
- PR merge metrics
- No merged PRs in 30d
Description
Going through the documentation and the code I've created an initial incomplete EBNF understood by https://github.com/GuntherRademacher/rr that can generate nice navigable railroad diagrams (see bellow with instructions at the top).
I've found that railroad diagrams are a nice and intuitive way to show a grammar as a whole in a way that helps document/develop/debug the same.
//
// EBNF to be viewd at
// (IPV6) https://www.bottlecaps.de/rr/ui
// (IPV4) https://rr.red-dove.com/ui
//
// Copy and paste this at one of the urls shown above in the 'Edit Grammar' tab
// then click the 'View Diagram' tab.
//
reflex::=
definitions "%%" rules "%%" user_code
user_code::=
/*%empty*/
| USERCODE
definitions::=
/*%empty*/
| definitions definition
definition::=
NL
| is_code
| is_top_code
| is_class_code
| is_init_code
| is_begin_code
| is_include
| is_state
| is_xstate
| is_option
| def_named_pattern
is_code::=
"%{" CODE_TILL_PCT_CURLY
is_top_code::=
"%top{" CODE_TILL_CURLY
is_class_code::=
"%class{" CODE_TILL_CURLY
is_init_code::=
"%init{" CODE_TILL_CURLY
is_begin_code::=
"%begin{" CODE_TILL_CURLY
is_include::=
"%include" STRING
is_state::=
"%state" name_list
is_xstate::=
"%xstate" name_list
name_list::=
NAME
| name_list NAME
is_option::=
"%option" key_value_list
key_value_list::=
key_option
| key_value_list key_option
key_option::=
"array"
| "always_interactive"
| "batch"
| "bison"
| "bison_bridge"
| "bison_cc"
| "bison_cc_namespace"
| "bison_cc_parser"
| "bison_complete"
| "bison_locations"
| "case_insensitive"
| "class"
| "ctorarg"
| "ctorinit"
| "debug"
| "default"
| "do" '=' name_or_string
| "dotall"
| "exception"
| "extra_type"
| "fast"
| "find"
| "flex"
| "freespace"
| "full"
| "graphs_file"
| "header_file"
| "include"
| "indent"
| "input"
| "interactive"
| "lex"
| "lex_compat"
| "lexer"
| "main"
| "matcher" '=' name_or_string
| "namespace"
| "never_interactive"
| "noarray"
| "nocase_insensitive"
| "nodebug"
| "nodefault"
| "nodotall"
| "nofreespace"
| "noindent"
| "noinput"
| "noline"
| "nomain"
| "nopointer"
| "nostack"
| "nostdinit"
| "nounicode"
| "nounistd"
| "nounput"
| "nowarn"
| "noyylineno"
| "noyymore"
| "noyypanic"
| "noyywrap"
| "outfile" '=' name_or_string
| "params"
| "pattern"
| "permissive"
| "pointer"
| "perf_report"
| "posix_compat"
| "prefix" '=' name_or_string
| "reentrant"
| "regexp_file"
| "stack"
| "stdinit"
| "stdout"
| "tables_file"
| "tabs" '=' name_or_string
| "token_eof"
| "token_type"
| "unicode"
| "unicode" '=' unicode_block
| "unput"
| "verbose"
| "warn"
| "yy"
| "yyclass"
| "yylineno"
| "yymore"
| "yypanic"
| "yywrap"
| "YYLTYPE"
| "YYSTYPE"
| "7bit"
| "8bit"
unicode_block::=
"\\p{IsBasicLatin}"
| "\\p{IsLatin-1Supplement}"
| "\\p{IsLatinExtended-A}"
| "\\p{IsLatinExtended-B}"
| "\\p{IsIPAExtensions}"
| "\\p{IsSpacingModifierLetters}"
| "\\p{IsCombiningDiacriticalMarks}"
| "\\p{IsGreekandCoptic}"
| "\\p{IsCyrillic}"
| "\\p{IsCyrillicSupplement}"
| "\\p{IsArmenian}"
| "\\p{IsHebrew}"
| "\\p{IsArabic}"
| "\\p{IsSyriac}"
| "\\p{IsArabicSupplement}"
| "\\p{IsThaana}"
| "\\p{IsNKo}"
| "\\p{IsSamaritan}"
| "\\p{IsMandaic}"
| "\\p{IsSyriacSupplement}"
| "\\p{IsArabicExtended-B}"
| "\\p{IsArabicExtended-A}"
| "\\p{IsDevanagari}"
| "\\p{IsBengali}"
| "\\p{IsGurmukhi}"
| "\\p{IsGujarati}"
| "\\p{IsOriya}"
| "\\p{IsTamil}"
| "\\p{IsTelugu}"
| "\\p{IsKannada}"
| "\\p{IsMalayalam}"
| "\\p{IsSinhala}"
| "\\p{IsThai}"
| "\\p{IsLao}"
| "\\p{IsTibetan}"
| "\\p{IsMyanmar}"
| "\\p{IsGeorgian}"
| "\\p{IsHangulJamo}"
| "\\p{IsEthiopic}"
| "\\p{IsEthiopicSupplement}"
| "\\p{IsCherokee}"
| "\\p{IsUnifiedCanadianAboriginalSyllabics}"
| "\\p{IsOgham}"
| "\\p{IsRunic}"
| "\\p{IsTagalog}"
| "\\p{IsHanunoo}"
| "\\p{IsBuhid}"
| "\\p{IsTagbanwa}"
| "\\p{IsKhmer}"
| "\\p{IsMongolian}"
| "\\p{IsUnifiedCanadianAboriginalSyllabicsExtended}"
| "\\p{IsLimbu}"
| "\\p{IsTaiLe}"
| "\\p{IsNewTaiLue}"
| "\\p{IsKhmerSymbols}"
| "\\p{IsBuginese}"
| "\\p{IsTaiTham}"
| "\\p{IsCombiningDiacriticalMarksExtended}"
| "\\p{IsBalinese}"
| "\\p{IsSundanese}"
| "\\p{IsBatak}"
| "\\p{IsLepcha}"
| "\\p{IsOlChiki}"
| "\\p{IsCyrillicExtended-C}"
| "\\p{IsGeorgianExtended}"
| "\\p{IsSundaneseSupplement}"
| "\\p{IsVedicExtensions}"
| "\\p{IsPhoneticExtensions}"
| "\\p{IsPhoneticExtensionsSupplement}"
| "\\p{IsCombiningDiacriticalMarksSupplement}"
| "\\p{IsLatinExtendedAdditional}"
| "\\p{IsGreekExtended}"
| "\\p{IsGeneralPunctuation}"
| "\\p{IsSuperscriptsandSubscripts}"
| "\\p{IsCurrencySymbols}"
| "\\p{IsCombiningDiacriticalMarksforSymbols}"
| "\\p{IsLetterlikeSymbols}"
| "\\p{IsNumberForms}"
| "\\p{IsArrows}"
| "\\p{IsMathematicalOperators}"
| "\\p{IsMiscellaneousTechnical}"
| "\\p{IsControlPictures}"
| "\\p{IsOpticalCharacterRecognition}"
| "\\p{IsEnclosedAlphanumerics}"
| "\\p{IsBoxDrawing}"
| "\\p{IsBlockElements}"
| "\\p{IsGeometricShapes}"
| "\\p{IsMiscellaneousSymbols}"
| "\\p{IsDingbats}"
| "\\p{IsMiscellaneousMathematicalSymbols-A}"
| "\\p{IsSupplementalArrows-A}"
| "\\p{IsBraillePatterns}"
| "\\p{IsSupplementalArrows-B}"
| "\\p{IsMiscellaneousMathematicalSymbols-B}"
| "\\p{IsSupplementalMathematicalOperators}"
| "\\p{IsMiscellaneousSymbolsandArrows}"
| "\\p{IsGlagolitic}"
| "\\p{IsLatinExtended-C}"
| "\\p{IsCoptic}"
| "\\p{IsGeorgianSupplement}"
| "\\p{IsTifinagh}"
| "\\p{IsEthiopicExtended}"
| "\\p{IsCyrillicExtended-A}"
| "\\p{IsSupplementalPunctuation}"
| "\\p{IsCJKRadicalsSupplement}"
| "\\p{IsKangxiRadicals}"
| "\\p{IsIdeographicDescriptionCharacters}"
| "\\p{IsCJKSymbolsandPunctuation}"
| "\\p{IsHiragana}"
| "\\p{IsKatakana}"
| "\\p{IsBopomofo}"
| "\\p{IsHangulCompatibilityJamo}"
| "\\p{IsKanbun}"
| "\\p{IsBopomofoExtended}"
| "\\p{IsCJKStrokes}"
| "\\p{IsKatakanaPhoneticExtensions}"
| "\\p{IsEnclosedCJKLettersandMonths}"
| "\\p{IsCJKCompatibility}"
| "\\p{IsCJKUnifiedIdeographsExtensionA}"
| "\\p{IsYijingHexagramSymbols}"
| "\\p{IsCJKUnifiedIdeographs}"
| "\\p{IsYiSyllables}"
| "\\p{IsYiRadicals}"
| "\\p{IsLisu}"
| "\\p{IsVai}"
| "\\p{IsCyrillicExtended-B}"
| "\\p{IsBamum}"
| "\\p{IsModifierToneLetters}"
| "\\p{IsLatinExtended-D}"
| "\\p{IsSylotiNagri}"
| "\\p{IsCommonIndicNumberForms}"
| "\\p{IsPhags-pa}"
| "\\p{IsSaurashtra}"
| "\\p{IsDevanagariExtended}"
| "\\p{IsKayahLi}"
| "\\p{IsRejang}"
| "\\p{IsHangulJamoExtended-A}"
| "\\p{IsJavanese}"
| "\\p{IsMyanmarExtended-B}"
| "\\p{IsCham}"
| "\\p{IsMyanmarExtended-A}"
| "\\p{IsTaiViet}"
| "\\p{IsMeeteiMayekExtensions}"
| "\\p{IsEthiopicExtended-A}"
| "\\p{IsLatinExtended-E}"
| "\\p{IsCherokeeSupplement}"
| "\\p{IsMeeteiMayek}"
| "\\p{IsHangulSyllables}"
| "\\p{IsHangulJamoExtended-B}"
| "\\p{IsHighSurrogates}"
| "\\p{IsHighPrivateUseSurrogates}"
| "\\p{IsLowSurrogates}"
| "\\p{IsPrivateUseArea}"
| "\\p{IsCJKCompatibilityIdeographs}"
| "\\p{IsAlphabeticPresentationForms}"
| "\\p{IsArabicPresentationForms-A}"
| "\\p{IsVariationSelectors}"
| "\\p{IsVerticalForms}"
| "\\p{IsCombiningHalfMarks}"
| "\\p{IsCJKCompatibilityForms}"
| "\\p{IsSmallFormVariants}"
| "\\p{IsArabicPresentationForms-B}"
| "\\p{IsHalfwidthandFullwidthForms}"
| "\\p{IsSpecials}"
| "\\p{IsLinearBSyllabary}"
| "\\p{IsLinearBIdeograms}"
| "\\p{IsAegeanNumbers}"
| "\\p{IsAncientGreekNumbers}"
| "\\p{IsAncientSymbols}"
| "\\p{IsPhaistosDisc}"
| "\\p{IsLycian}"
| "\\p{IsCarian}"
| "\\p{IsCopticEpactNumbers}"
| "\\p{IsOldItalic}"
| "\\p{IsGothic}"
| "\\p{IsOldPermic}"
| "\\p{IsUgaritic}"
| "\\p{IsOldPersian}"
| "\\p{IsDeseret}"
| "\\p{IsShavian}"
| "\\p{IsOsmanya}"
| "\\p{IsOsage}"
| "\\p{IsElbasan}"
| "\\p{IsCaucasianAlbanian}"
| "\\p{IsVithkuqi}"
| "\\p{IsLinearA}"
| "\\p{IsLatinExtended-F}"
| "\\p{IsCypriotSyllabary}"
| "\\p{IsImperialAramaic}"
| "\\p{IsPalmyrene}"
| "\\p{IsNabataean}"
| "\\p{IsHatran}"
| "\\p{IsPhoenician}"
| "\\p{IsLydian}"
| "\\p{IsMeroiticHieroglyphs}"
| "\\p{IsMeroiticCursive}"
| "\\p{IsKharoshthi}"
| "\\p{IsOldSouthArabian}"
| "\\p{IsOldNorthArabian}"
| "\\p{IsManichaean}"
| "\\p{IsAvestan}"
| "\\p{IsInscriptionalParthian}"
| "\\p{IsInscriptionalPahlavi}"
| "\\p{IsPsalterPahlavi}"
| "\\p{IsOldTurkic}"
| "\\p{IsOldHungarian}"
| "\\p{IsHanifiRohingya}"
| "\\p{IsRumiNumeralSymbols}"
| "\\p{IsYezidi}"
| "\\p{IsOldSogdian}"
| "\\p{IsSogdian}"
| "\\p{IsOldUyghur}"
| "\\p{IsChorasmian}"
| "\\p{IsElymaic}"
| "\\p{IsBrahmi}"
| "\\p{IsKaithi}"
| "\\p{IsSoraSompeng}"
| "\\p{IsChakma}"
| "\\p{IsMahajani}"
| "\\p{IsSharada}"
| "\\p{IsSinhalaArchaicNumbers}"
| "\\p{IsKhojki}"
| "\\p{IsMultani}"
| "\\p{IsKhudawadi}"
| "\\p{IsGrantha}"
| "\\p{IsNewa}"
| "\\p{IsTirhuta}"
| "\\p{IsSiddham}"
| "\\p{IsModi}"
| "\\p{IsMongolianSupplement}"
| "\\p{IsTakri}"
| "\\p{IsAhom}"
| "\\p{IsDogra}"
| "\\p{IsWarangCiti}"
| "\\p{IsDivesAkuru}"
| "\\p{IsNandinagari}"
| "\\p{IsZanabazarSquare}"
| "\\p{IsSoyombo}"
| "\\p{IsUnifiedCanadianAboriginalSyllabicsExtended-A}"
| "\\p{IsPauCinHau}"
| "\\p{IsBhaiksuki}"
| "\\p{IsMarchen}"
| "\\p{IsMasaramGondi}"
| "\\p{IsGunjalaGondi}"
| "\\p{IsMakasar}"
| "\\p{IsLisuSupplement}"
| "\\p{IsTamilSupplement}"
| "\\p{IsCuneiform}"
| "\\p{IsCuneiformNumbersandPunctuation}"
| "\\p{IsEarlyDynasticCuneiform}"
| "\\p{IsCypro-Minoan}"
| "\\p{IsEgyptianHieroglyphs}"
| "\\p{IsEgyptianHieroglyphFormatControls}"
| "\\p{IsAnatolianHieroglyphs}"
| "\\p{IsBamumSupplement}"
| "\\p{IsMro}"
| "\\p{IsTangsa}"
| "\\p{IsBassaVah}"
| "\\p{IsPahawhHmong}"
| "\\p{IsMedefaidrin}"
| "\\p{IsMiao}"
| "\\p{IsIdeographicSymbolsandPunctuation}"
| "\\p{IsTangut}"
| "\\p{IsTangutComponents}"
| "\\p{IsKhitanSmallScript}"
| "\\p{IsTangutSupplement}"
| "\\p{IsKanaExtended-B}"
| "\\p{IsKanaSupplement}"
| "\\p{IsKanaExtended-A}"
| "\\p{IsSmallKanaExtension}"
| "\\p{IsNushu}"
| "\\p{IsDuployan}"
| "\\p{IsShorthandFormatControls}"
| "\\p{IsZnamennyMusicalNotation}"
| "\\p{IsByzantineMusicalSymbols}"
| "\\p{IsMusicalSymbols}"
| "\\p{IsAncientGreekMusicalNotation}"
| "\\p{IsMayanNumerals}"
| "\\p{IsTaiXuanJingSymbols}"
| "\\p{IsCountingRodNumerals}"
| "\\p{IsMathematicalAlphanumericSymbols}"
| "\\p{IsSuttonSignWriting}"
| "\\p{IsLatinExtended-G}"
| "\\p{IsGlagoliticSupplement}"
| "\\p{IsNyiakengPuachueHmong}"
| "\\p{IsToto}"
| "\\p{IsWancho}"
| "\\p{IsEthiopicExtended-B}"
| "\\p{IsMendeKikakui}"
| "\\p{IsAdlam}"
| "\\p{IsIndicSiyaqNumbers}"
| "\\p{IsOttomanSiyaqNumbers}"
| "\\p{IsArabicMathematicalAlphabeticSymbols}"
| "\\p{IsMahjongTiles}"
| "\\p{IsDominoTiles}"
| "\\p{IsPlayingCards}"
| "\\p{IsEnclosedAlphanumericSupplement}"
| "\\p{IsEnclosedIdeographicSupplement}"
| "\\p{IsMiscellaneousSymbolsandPictographs}"
| "\\p{IsEmoticons}"
| "\\p{IsOrnamentalDingbats}"
| "\\p{IsTransportandMapSymbols}"
| "\\p{IsAlchemicalSymbols}"
| "\\p{IsGeometricShapesExtended}"
| "\\p{IsSupplementalArrows-C}"
| "\\p{IsSupplementalSymbolsandPictographs}"
| "\\p{IsChessSymbols}"
| "\\p{IsSymbolsandPictographsExtended-A}"
| "\\p{IsSymbolsforLegacyComputing}"
| "\\p{IsCJKUnifiedIdeographsExtensionB}"
| "\\p{IsCJKUnifiedIdeographsExtensionC}"
| "\\p{IsCJKUnifiedIdeographsExtensionD}"
| "\\p{IsCJKUnifiedIdeographsExtensionE}"
| "\\p{IsCJKUnifiedIdeographsExtensionF}"
| "\\p{IsCJKCompatibilityIdeographsSupplement}"
| "\\p{IsCJKUnifiedIdeographsExtensionG}"
| "\\p{IsTags}"
| "\\p{IsVariationSelectorsSupplement}"
| "\\p{IsSupplementaryPrivateUseArea-A}"
| "\\p{IsSupplementaryPrivateUseArea-B}"
| "\\p{Adlam}"
| "\\p{Ahom}"
| "\\p{Anatolian_Hieroglyphs}"
| "\\p{Arabic}"
| "\\p{Armenian}"
| "\\p{Avestan}"
| "\\p{Balinese}"
| "\\p{Bamum}"
| "\\p{Bassa_Vah}"
| "\\p{Batak}"
| "\\p{Bengali}"
| "\\p{Bhaiksuki}"
| "\\p{Bopomofo}"
| "\\p{Brahmi}"
| "\\p{Braille}"
| "\\p{Buginese}"
| "\\p{Buhid}"
| "\\p{Canadian_Aboriginal}"
| "\\p{Carian}"
| "\\p{Caucasian_Albanian}"
| "\\p{Chakma}"
| "\\p{Cham}"
| "\\p{Cherokee}"
| "\\p{Chorasmian}"
| "\\p{Common}"
| "\\p{Coptic}"
| "\\p{Cuneiform}"
| "\\p{Cypriot}"
| "\\p{Cypro_Minoan}"
| "\\p{Cyrillic}"
| "\\p{Deseret}"
| "\\p{Devanagari}"
| "\\p{Dives_Akuru}"
| "\\p{Dogra}"
| "\\p{Duployan}"
| "\\p{Egyptian_Hieroglyphs}"
| "\\p{Elbasan}"
| "\\p{Elymaic}"
| "\\p{Ethiopic}"
| "\\p{Georgian}"
| "\\p{Glagolitic}"
| "\\p{Gothic}"
| "\\p{Grantha}"
| "\\p{Greek}"
| "\\p{Gujarati}"
| "\\p{Gunjala_Gondi}"
| "\\p{Gurmukhi}"
| "\\p{Han}"
| "\\p{Hangul}"
| "\\p{Hanifi_Rohingya}"
| "\\p{Hanunoo}"
| "\\p{Hatran}"
| "\\p{Hebrew}"
| "\\p{Hiragana}"
| "\\p{Imperial_Aramaic}"
| "\\p{Inscriptional_Pahlavi}"
| "\\p{Inscriptional_Parthian}"
| "\\p{Javanese}"
| "\\p{Kaithi}"
| "\\p{Kannada}"
| "\\p{Katakana}"
| "\\p{Kayah_Li}"
| "\\p{Kharoshthi}"
| "\\p{Khitan_Small_Script}"
| "\\p{Khmer}"
| "\\p{Khojki}"
| "\\p{Khudawadi}"
| "\\p{Lao}"
| "\\p{Latin}"
| "\\p{Lepcha}"
| "\\p{Limbu}"
| "\\p{Linear_A}"
| "\\p{Linear_B}"
| "\\p{Lisu}"
| "\\p{Lycian}"
| "\\p{Lydian}"
| "\\p{Mahajani}"
| "\\p{Makasar}"
| "\\p{Malayalam}"
| "\\p{Mandaic}"
| "\\p{Manichaean}"
| "\\p{Marchen}"
| "\\p{Masaram_Gondi}"
| "\\p{Medefaidrin}"
| "\\p{Meetei_Mayek}"
| "\\p{Mende_Kikakui}"
| "\\p{Meroitic_Cursive}"
| "\\p{Meroitic_Hieroglyphs}"
| "\\p{Miao}"
| "\\p{Modi}"
| "\\p{Mongolian}"
| "\\p{Mro}"
| "\\p{Multani}"
| "\\p{Myanmar}"
| "\\p{Nabataean}"
| "\\p{Nandinagari}"
| "\\p{New_Tai_Lue}"
| "\\p{Newa}"
| "\\p{Nko}"
| "\\p{Nushu}"
| "\\p{Nyiakeng_Puachue_Hmong}"
| "\\p{Ogham}"
| "\\p{Old_Uyghur}"
| "\\p{Ol_Chiki}"
| "\\p{Old_Hungarian}"
| "\\p{Old_Italic}"
| "\\p{Old_North_Arabian}"
| "\\p{Old_Permic}"
| "\\p{Old_Persian}"
| "\\p{Old_Sogdian}"
| "\\p{Old_South_Arabian}"
| "\\p{Old_Turkic}"
| "\\p{Oriya}"
| "\\p{Osage}"
| "\\p{Osmanya}"
| "\\p{Pahawh_Hmong}"
| "\\p{Palmyrene}"
| "\\p{Pau_Cin_Hau}"
| "\\p{Phags_Pa}"
| "\\p{Phoenician}"
| "\\p{Psalter_Pahlavi}"
| "\\p{Rejang}"
| "\\p{Runic}"
| "\\p{Samaritan}"
| "\\p{Saurashtra}"
| "\\p{Sharada}"
| "\\p{Shavian}"
| "\\p{Siddham}"
| "\\p{SignWriting}"
| "\\p{Sinhala}"
| "\\p{Sogdian}"
| "\\p{Sora_Sompeng}"
| "\\p{Soyombo}"
| "\\p{Sundanese}"
| "\\p{Syloti_Nagri}"
| "\\p{Syriac}"
| "\\p{Tagalog}"
| "\\p{Tagbanwa}"
| "\\p{Tai_Le}"
| "\\p{Tai_Tham}"
| "\\p{Tai_Viet}"
| "\\p{Takri}"
| "\\p{Tamil}"
| "\\p{Tangut}"
| "\\p{Tangsa}"
| "\\p{Telugu}"
| "\\p{Thaana}"
| "\\p{Thai}"
| "\\p{Tibetan}"
| "\\p{Tifinagh}"
| "\\p{Tirhuta}"
| "\\p{Toto}"
| "\\p{Ugaritic}"
| "\\p{Vai}"
| "\\p{Vithkuqi}"
| "\\p{Wancho}"
| "\\p{Warang_Citi}"
| "\\p{Yezidi}"
| "\\p{Yi}"
| "\\p{Zanabazar_Square}"
name_or_string::=
NAME
| STRING
def_named_pattern::=
NAME pattern
pattern::=
patter_prefix pattern_part repetition patter_sufix
| pattern patter_prefix pattern_part repetition patter_sufix
| pattern '|' pattern
patter_prefix::=
/*%empty*/
| "^"
| "\\A"
patter_sufix::=
/*%empty*/
| "$"
| "\\z"
repetition::=
/*%empty*/
| repetition_base
| repetition_base '?'
repetition_base::=
'?'
| '+'
| '*'
| '{' INTEGER ',' INTEGER '}'
| '{' INTEGER ',' '}'
| '{' INTEGER '}'
pattern_part::=
unicode_class
| "\\d"
| "\\s"
| "\\a"
| "\\b"
| "\\t"
| "\\v"
| "\\f"
| "\\r"
| "\\n"
| "\\."
| "\\N"
| "\\0"
| "\\cX"
| "\\[0-8]+"
| "\\o[0-8]+"
| "\\x[0-9A-Fa-f]+"
| "\\u[0-9A-Fa-f]+"
| "\Q...\E"
| '.'
| RECLASS
| '{' NAME '}'
| '(' pattern ')'
| "(?:" pattern ')'
| "(?=" pattern ')'
| "(?<=" pattern ')'
| "(?^" pattern ')'
| "\\i"
| "\\j"
| "\\k"
| "(?i:" pattern ')'
| "(?m:" pattern ')'
| "(?s:" pattern ')'
| "(?u:" pattern ')'
| "(?x:" pattern ')'
| "(?#:" pattern ')'
unicode_class::=
"\\p{Space}"
| "\\p{Unicode}"
| "\\p{ASCII}"
| "\\p{Non_ASCII_Unicode}"
| "\\p{L&}"
| "\\p{Letter}"
| "\\p{L}"
| "\\p{Mark}"
| "\\p{M}"
| "\\p{Separator}"
| "\\p{Z}"
| "\\p{Symbol}"
| "\\p{S}"
| "\\p{Number}"
| "\\p{N}"
| "\\p{Punctuation}"
| "\\p{P}"
| "\\p{Other}"
| "\\p{C}"
| "\\p{Lowercase_Letter}"
| "\\p{Ll}"
| "\\p{Uppercase_Letter}"
| "\\p{Lu}"
| "\\p{Titlecase_Letter}"
| "\\p{Lt}"
| "\\p{Modifier_Letter}"
| "\\p{Lm}"
| "\\p{Other_Letter}"
| "\\p{Lo}"
| "\\p{Non_Spacing_Mark}"
| "\\p{Mn}"
| "\\p{Spacing_Combining_Mark}"
| "\\p{Mc}"
| "\\p{Enclosing_Mark}"
| "\\p{Me}"
| "\\p{Space_Separator}"
| "\\p{Zs}"
| "\\p{Line_Separator}"
| "\\p{Zl}"
| "\\p{Paragraph_Separator}"
| "\\p{Zp}"
| "\\p{Math_Symbol}"
| "\\p{Sm}"
| "\\p{Currency_Symbol}"
| "\\p{Sc}"
| "\\p{Modifier_Symbol}"
| "\\p{Sk}"
| "\\p{Other_Symbol}"
| "\\p{So}"
| "\\p{Decimal_Digit_Number}"
| "\\p{Nd}"
| "\\p{Letter_Number}"
| "\\p{Nl}"
| "\\p{Other_Number}"
| "\\p{No}"
| "\\p{Dash_Punctuation}"
| "\\p{Pd}"
| "\\p{Open_Punctuation}"
| "\\p{Ps}"
| "\\p{Close_Punctuation}"
| "\\p{Pe}"
| "\\p{Initial_Punctuation}"
| "\\p{Pi}"
| "\\p{Final_Punctuation}"
| "\\p{Pf}"
| "\\p{Connector_Punctuation}"
| "\\p{Pc}"
| "\\p{Other_Punctuation}"
| "\\p{Po}"
| "\\p{Control}"
| "\\p{Cc}"
| "\\p{Format}"
| "\\p{Cf}"
| "\\p{UnicodeIdentifierStart}"
| "\\p{UnicodeIdentifierPart}"
| "\\p{IdentifierIgnorable}"
| "\\p{JavaIdentifierStart}"
| "\\p{JavaIdentifierPart}"
| "\\p{CsIdentifierStart}"
| "\\p{CsIdentifierPart}"
| "\\p{PythonIdentifierStart}"
| "\\p{PythonIdentifierPart}"
rules::=
rule
| rules rule
rule::=
NL
| pattern action
action::=
/*%empty*/
| ACTION_CODE
//Tokens
NAME ::= [A-Za-z_][A-Za-z0-9_-]*
ACTION_CODE ::= '{' CODE_TILL_CURLY
USERCODE ::= .*
CODE_TILL_PCT_CURLY ::= [^%]* '%}'
CODE_TILL_CURLY ::= [^}]* '}'
RECLASS ::= '[' '^'? [^\n\#x5D]+ ']'
STRING ::= '"' ("\\" . | [^"\n\\])+ '"'
INTEGER ::= [0-9]+
NL ::= '\n'
Whitespace ::= S | Comment
S ::= '\t' | '\r' | ' '
Comment ::= '/*' ( [^*] | '*'+ [^*/] )* '*'* '*/' | "//".*
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the incomplete EBNF embedded in this issue and validate it in one of the linked rr viewers. Compare the productions with the project's grammar and complete the missing portions. Done means the grammar renders a usable, navigable railroad diagram.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- compilers, documentation
- Issue type
- Documentation
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100