Я пытался создать парсер на основе Bison, используя некоторые файлы BNF, которые я нашел на Github. Моя проблема, однако, заключается в том, что я не могу определить, какую вариацию BNF используют файлы.
Вот ссылка на папка с образцами варианта BNF.
В bnf.rkt , автор ссылается на страницу BNF в Википедии , но его файл выглядит совсем не так:
## The following comes from: http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form
<syntax> : <rule> | <rule> <syntax>
<rule> : <opt-whitespace> "<" <RULE-NAME> ">" <opt-whitespace> "::="
<opt-whitespace> <expression> <line-end>
<opt-whitespace> : " " <opt-whitespace> | "" ## "" is empty string, i.e. no whitespace
<expression> : <list> | <list> "|" <expression>
<line-end> : <opt-whitespace> <EOL> | <line-end> <line-end>
<list> : <term> | <term> <opt-whitespace> <list>
<term> : <literal> | "<" <RULE-NAME> ">"
<literal> : '"' <TEXT> '"' | "'" <TEXT> "'" ## actually, the original BNF did not use quotes
Вот пример (из репозитория) о том, как этот синтаксис используется для представления базового JSON:
;; Simple baby example of JSON structure
json: number | string
| array
| object
number: NUMBER
string: STRING
array: "[" [json ("," json)*] "]"
object: "{" [kvpair ("," kvpair)*] "}"
kvpair: ID ":" json
Кто-нибудь знает, что он использует? Я хотел бы преобразовать это в формат, читаемый Бизоном, если это возможно.
Заранее спасибо.