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

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

Изменено 09.03.2017 21:59 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…4 { шестнадцатеричная цифра } ;
(*Ъ*) шестнадцатеричная цифра = десятичная цифра | "А" | "Б" | "В" | "Г" | "Д" | "Е" ;
(*Ы*) любой символ = . ;
(*Ь*) утаивание = "[" , гм , выражение , гм , "]" ;
(*Э*) группировка = "(" , гм , выражение , гм , ")" ;
(*Ю*) повторение = [ количество повторений , гм  ] , "{" , гм , выражение , гм , "}" ;
(*Я*) количество повторений = не менее | не более | диапазон | десятичное число ;
(*1*) не менее = десятичное число , гм , "…" ;
(*2*) десятичное число = "0" | ( десятичная цифра - "0" , { десятичная цифра } ) ;
(*3*) не более = "…" , гм , десятичное число ;
(*4*) диапазон = десятичное число , гм , "…" , гм , десятичное число ;
(*5*) исключение = выражение , гм , "-" , гм , выражение ;


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…4 { шестнадцатеричная цифра } ;
(*Ъ*) шестнадцатеричная цифра = десятичная цифра | "А" | "Б" | "В" | "Г" | "Д" | "Е" ;
(*Ы*) любой символ = . ;
(*Ь*) утаивание = "[" , гм , выражение , гм , "]" ;
(*Э*) группировка = "(" , гм , выражение , гм , ")" ;
(*Ю*) повторение = [ количество повторений , гм  ] , "{" , гм , выражение , гм , "}" ;
(*Я*) количество повторений = диапазон | не менее | не более | десятичное число ;
(*1*) диапазон = десятичное число , гм , "…" , гм , десятичное число ;
(*2*) десятичное число = "0" | ( десятичная цифра - "0" , { десятичная цифра } ) ;
(*3*) не менее = десятичное число , гм , "…" ;
(*4*) не более = "…" , гм , десятичное число ;
(*5*) исключение = выражение , гм , "-" , гм , выражение ;


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