Genivia / Genivia/RE-flex

Grammar railroad diagram

Open
#231 4 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.