Информация об изменениях

Сообщение контекстно-свободная самоописывающаяся грамматика от 03.03.2017 8:42

Изменено 09.03.2017 23:35 Arsen.Shnurkov

контекстно-свободная самоописывающаяся грамматика
Помогите, пожалуйста, найти ошибки в коде:

       (* контекстно-свободная самоописывающаяся грамматика *)

(*А*) файл = [ маркер ] , гм , правило , { гм , правило } , гм ;
(*Б*) маркер = "0шДЕ", "0шББ", "0шБЕ" ;
(*В*) гм = { обм } ; (* сгруппированное необязательное белое место *)
(*Г*) обм = ябм | комментарий ; (* обязательное белое место *)
(*Д*) ябм = тп | новая строка ; (* явно белое место *)
(*Е*) тп = ( табуляция | пробел ) , { табуляция | пробел } ;
(*Ё*) табуляция = "0ш07" ;
(*Ж*) пробел = "0ш20" ;
(*З*) новая строка = перевод строки | возврат каретки , перевод строки | возврат каретки ;
(*И*) перевод строки = "0ш0А" ;
(*Й*) возврат каретки = "0ш0В" ;
(*К*) комментарий = "(*" , { ( знак - "*" ) | ( "*" , знак - ")" ) } , "*)" ;
(*Л*) знак = 
       десятичная цифра | буква | знак препинания
       | пробел | перевод строки | возврат каретки  | расширение текстореза ;
(*М*) десятичная цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
(*Н*) буква = "а" | "б" | "в" | "г" | "д" | "е" | "ё" | "ж" | "з" | "и"
       | "й" | "к" | "л" | "м" | "н" | "о" | "п" | "р" | "с" | "т"
       | "у" | "ф" | "х" | "ц" | "ч" | "ш" | "щ" | "ъ" | "ы" | "ь"
       | "э" | "ю" | "я"
       | "А" | "Б" | "В" | "Г" | "Д" | "Е" | "Ё" | "Ж" | "З" | "И"
       | "Й" | "К" | "Л" | "М" | "Н" | "О" | "П" | "Р" | "С" | "Т"
       | "У" | "Ф" | "Х" | "Ц" | "Ч" | "Ш" | "Щ" | "Ъ" | "Ы" | "Ь"
       | "Э" | "Ю" | "Я" 
       | "а́" | "е́" | "и́" | "о́" | "у́" | "ы́" | "э́" | "ю́" | "я́"
       | "А́" | "Е́" | "И́" | "О́" | "У́" | "Ы́" | "Э́" | "Ю́" | "Я́"
       ;
(*О*) знак препинания = 
       | "?" | "!" | "." | "…" | "," | ";" | двойная кавычка | "-"
       | "[" | "]" | "{" | "}" | "(" | ")" | "/" | "\"
       | "=" | "+" | "*" | "^" ;
(*П*) расширение текстореза = "?" , { знак - "?" } , "?" ;
(*Р*) двойная кавычка = "0ш22" ;
(*С*) правило = имя , гм , "=" , гм , выражение , гм , ";" ;
(*Т*) выражение = перечисление , { гм , "|" , гм , перечисление } ;
(*У*) перечисление = выбор , { гм , "," , гм , выбор } ;
(*Ф*) выбор = имя | строка | утаивание | группировка | повторение | исключение | "." ;
(*Х*) имя = часть имени, { тп , часть имени } ;
(*Ц*) часть имени = буква , { буква | цифра } ;
(*Ч*) строка = двойная кавычка , { символ в строке } , двойная кавычка ;
(*Ш*) символ в строке = символ из битов | ( любой символ - двойная кавычка ) ;
(*Щ*) символ из битов = ( "0б" , 1…16 { двоичная цифра } ) | ( "0ш" , 1…4 { шестнадцатеричная цифра } ) ;
(*Ъ*) двоичная цифра = "0" | "1" ;
(*Ы*) шестнадцатеричная цифра = десятичная цифра | "А" | "Б" | "В" | "Г" | "Д" | "Е" ;
(*Ь*) любой символ = . ;
(*Э*) утаивание = "[" , гм , выражение , гм , "]" ;
(*Ю*) группировка = "(" , гм , выражение , гм , ")" ;
(*Я*) повторение = [ количество повторений , гм  ] , "{" , гм , выражение , гм , "}" ;
(*1*) количество повторений = диапазон | не менее | не более | десятичное число ;
(*2*) диапазон = десятичное число , гм , "…" , гм , десятичное число ;
(*3*) десятичное число = "0" | ( десятичная цифра - "0" , { десятичная цифра } ) ;
(*4*) не менее = десятичное число , гм , "…" ;
(*5*) не более = "…" , гм , десятичное число ;
(*6*) исключение = выражение , гм , "-" , гм , выражение ;


https://github.com/ArsenShnurkov/rus_gramm_norm/blob/master/rus_gramm_norm/Grammar/syntax1.ebnf
ebnf
контекстно-свободная самоописывающаяся грамматика
Помогите, пожалуйста, найти ошибки в коде:

       (* контекстно-свободная самоописывающаяся грамматика *)

(*А*) файл = [ маркер ] , гм , правило , { гм , правило } , гм ;
(*Б*) маркер = "0шДЕ", "0шББ", "0шБЕ" ;
(*В*) гм = { обм } ; (* сгруппированное необязательное белое место *)
(*Г*) обм = ябм | комментарий ; (* обязательное белое место *)
(*Д*) ябм = тп | новая строка ; (* явно белое место *)
(*Е*) тп = ( табуляция | пробел ) , { табуляция | пробел } ;
(*Ё*) табуляция = "0ш07" ;
(*Ж*) пробел = "0ш20" ;
(*З*) новая строка = перевод строки | возврат каретки , перевод строки | возврат каретки ;
(*И*) перевод строки = "0ш0А" ;
(*Й*) возврат каретки = "0ш0В" ;
(*К*) комментарий = "(*" , { ( знак - "*" ) | ( "*" , знак - ")" ) } , "*)" ;
(*Л*) знак = 
       десятичная цифра | буква | знак препинания
       | пробел | перевод строки | возврат каретки  | расширение текстореза ;
(*М*) десятичная цифра = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
(*Н*) буква = "а" | "б" | "в" | "г" | "д" | "е" | "ё" | "ж" | "з" | "и"
       | "й" | "к" | "л" | "м" | "н" | "о" | "п" | "р" | "с" | "т"
       | "у" | "ф" | "х" | "ц" | "ч" | "ш" | "щ" | "ъ" | "ы" | "ь"
       | "э" | "ю" | "я"
       | "А" | "Б" | "В" | "Г" | "Д" | "Е" | "Ё" | "Ж" | "З" | "И"
       | "Й" | "К" | "Л" | "М" | "Н" | "О" | "П" | "Р" | "С" | "Т"
       | "У" | "Ф" | "Х" | "Ц" | "Ч" | "Ш" | "Щ" | "Ъ" | "Ы" | "Ь"
       | "Э" | "Ю" | "Я" 
       | "а́" | "е́" | "и́" | "о́" | "у́" | "ы́" | "э́" | "ю́" | "я́"
       | "А́" | "Е́" | "И́" | "О́" | "У́" | "Ы́" | "Э́" | "Ю́" | "Я́"
       | "а̀" | "ѐ" | "ѝ" | "о̀" | "у̀" | "ы̀" | "э̀" | "ю̀" | "я̀"
       | "А̀" | "Ѐ" | "Ѝ" | "О̀" | "У̀" | "Ы̀" | "Э̀" | "Ю̀" | "Я̀"
       ;
(*О*) знак препинания = 
       | "?" | "!" | "." | "…" | "," | ";" | двойная кавычка | "-"
       | "[" | "]" | "{" | "}" | "(" | ")" | "/" | "\"
       | "=" | "+" | "*" | "^" ;
(*П*) расширение текстореза = "?" , { знак - "?" } , "?" ;
(*Р*) двойная кавычка = "0ш22" ;
(*С*) правило = имя , гм , "=" , гм , выражение , гм , ";" ;
(*Т*) выражение = перечисление , { гм , "|" , гм , перечисление } ;
(*У*) перечисление = выбор , { гм , "," , гм , выбор } ;
(*Ф*) выбор = имя | строка | утаивание | группировка | повторение | исключение | "." ;
(*Х*) имя = часть имени, { тп , часть имени } ;
(*Ц*) часть имени = буква , { буква | цифра } ;
(*Ч*) строка = двойная кавычка , { символ в строке } , двойная кавычка ;
(*Ш*) символ в строке = символ из битов | ( любой символ - двойная кавычка ) ;
(*Щ*) символ из битов = ( "0б" , 1…16 { двоичная цифра } ) | ( "0ш" , 1…4 { шестнадцатеричная цифра } ) ;
(*Ъ*) двоичная цифра = "0" | "1" ;
(*Ы*) шестнадцатеричная цифра = десятичная цифра | "А" | "Б" | "В" | "Г" | "Д" | "Е" ;
(*Ь*) любой символ = . ;
(*Э*) утаивание = "[" , гм , выражение , гм , "]" ;
(*Ю*) группировка = "(" , гм , выражение , гм , ")" ;
(*Я*) повторение = [ количество повторений , гм  ] , "{" , гм , выражение , гм , "}" ;
(*1*) количество повторений = диапазон | не менее | не более | десятичное число ;
(*2*) диапазон = десятичное число , гм , "…" , гм , десятичное число ;
(*3*) десятичное число = "0" | ( десятичная цифра - "0" , { десятичная цифра } ) ;
(*4*) не менее = десятичное число , гм , "…" ;
(*5*) не более = "…" , гм , десятичное число ;
(*6*) исключение = выражение , гм , "-" , гм , выражение ;


https://github.com/ArsenShnurkov/rus_gramm_norm/blob/master/rus_gramm_norm/Grammar/syntax1.ebnf
ebnf