我正在研究使用我在Github上找到的一些BNF文件制作一个基于Bison的解析器。然而,我的问题是我似乎无法确定文件使用的BNF的变体。
Here is a link到包含BNF变种样本的文件夹。
在bnf.rkt中,作者引用BNF Wikipedia page,但他的文件看起来不像它:
## 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的示例(from the repo):
;; Simple baby example of JSON structure
json: number | string
| array
| object
number: NUMBER
string: STRING
array: "[" [json ("," json)*] "]"
object: "{" [kvpair ("," kvpair)*] "}"
kvpair: ID ":" json
有没有人知道他在用什么?如果可能,我想将其转换为Bison可读格式。
提前致谢。
答案 0 :(得分:1)
它是一种扩展的BNF,类似于各种解析器生成器中使用的扩展BNF,大致基于野牛语法,添加了括号和正则表达式运算符。文档为here,摘要为:
除了最后一点之外,例如,它与ANTLR使用的基本格式基本相同。