标签: ebnf

关于EBNF表示法和JSON的问题

最近我一直在研究解析器和语法以及它们是如何工作的.我正在阅读http://www.ietf.org/rfc/rfc4627.txt使用EBNF的JSON的正式语法.我对BNF和EBNF的理解非常有信心,但显然我还是不完全理解它.RFC定义了一个JSON对象,如下所示:

  object = begin-object [ member *( value-separator member ) ]
  end-object
Run Code Online (Sandbox Code Playgroud)

我理解这里的意图是表达任何JSON对象可以(可选)拥有一个成员,然后是0或更多(值分隔符,成员)对.我不明白的是,为什么会出现星号之前(value-separator member).不应该模仿正则表达式的星号,这样看来以后要重复0次以上的项目?不应该像这样编写JSON对象语法:

  object = begin-object [ member ( value-separator member )* ]
  end-object
Run Code Online (Sandbox Code Playgroud)

grammar parsing json bnf ebnf

5
推荐指数
2
解决办法
4305
查看次数

从ANTLR生成EBNF

有人知道从ANTLR生成EBNF的工具吗?ANTLR已接近EBNF,但出于文档目的,我希望有一个干净的EBNF描述(中间没有代码).

使用antlrworks,这已经很好地获取语法图:

java -cp antlrworks-1.1.4.jar org.antlr.works.Console -f yql.g -o output/ -sd eps
Run Code Online (Sandbox Code Playgroud)

但它希望有一个简单的文本描述,更好的文本,tex,html,xml或类似.

antlr ebnf

5
推荐指数
1
解决办法
2341
查看次数

扩展Backus-Naur表格操作顺序

我正在创建一个非常简单的规则语言的正式规范,非常简单.我想使用EBNF,因为这是一个标准,但我无法弄清楚如何指定操作顺序.到目前为止,这是规范.

rule = statement, { (‘AND’|’OR’), statement};

variable = ‘$’,alphabetic character, {alphabetic character | digit};

statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
                     | "H" | "I" | "J" | "K" | "L" | "M" | "N"
                     | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
                     | "V" | "W" | "X" | "Y" | "Z" ;

number …
Run Code Online (Sandbox Code Playgroud)

grammar language-design rules ebnf operator-precedence

5
推荐指数
1
解决办法
2539
查看次数

扩展的BNF语法突出显示

我试图找到扩展BNF(EBNF)很好的语法高亮.无法通过Google找到它.有谁知道链接?

谢谢.

syntax-highlighting highlight bnf ebnf

5
推荐指数
1
解决办法
1827
查看次数

ANTLR,如何在ANTLR中转换BNF,EBNF数据?

我必须生成CSV数据的解析器.不知怎的,我设法写了BNF,EBNF用于CSV数据,但我不知道如何将其转换为ANTLR语法(这是一个解析器生成器).例如,在EBNF中我们写道:

[{header entry}newline]newline
Run Code Online (Sandbox Code Playgroud)

但是当我在ANTLR中编写它以生成解析器时,它会给出一个错误而不是括号.我不是ANTLR的专家可以有人帮忙吗?

antlr bnf ebnf

4
推荐指数
1
解决办法
3058
查看次数

如何编写EBNF语法的解析?

我收到一个解析符合EBNF语法的文本的任务.我可以使用任何工具/库吗?

parsing ebnf

4
推荐指数
1
解决办法
6116
查看次数

Ebnf - 这是LL(1)语法吗?

我在维基百科上找到了以下EBNF,描述了EBNF:

letter = "A" | "B" | "C" | "D" | "E" | "F" | "G"
   | "H" | "I" | "J" | "K" | "L" | "M" | "N"
   | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
   | "V" | "W" | "X" | "Y" | "Z" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
symbol …
Run Code Online (Sandbox Code Playgroud)

parsing ebnf ll-grammar

4
推荐指数
1
解决办法
1502
查看次数

扩展的巴科斯诺尔形式 (EBNF) 能否描述一组无序的值?

我想使用扩展巴科斯-诺尔形式 (EBNF) 上下文无关语法定义一组无序的值。在 EBNF 中定义一个无序列表的值很容易,例如:

value = 'A' | 'B' | 'C';
list = value, {',', value};
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑它是否可以用于无序集合。

以下是有效的无序值集的示例:

A, B, C, D
A, B, D, C
A, D, C, B
...
D, C, B, A
Run Code Online (Sandbox Code Playgroud)

虽然无效列表将是:

A, A, C, D
B, C, C, B
A, A, A, A
...
Run Code Online (Sandbox Code Playgroud)

或任意长度的列表。

A, A, B, C, D, A
A, B, C, D, A, B, C, D
...
Run Code Online (Sandbox Code Playgroud)

parsing ebnf context-free-grammar context-free-language ebnf-syntactic-exception

4
推荐指数
1
解决办法
742
查看次数

递归下降解析器中的错误报告

我正在为配置文件编写一个递归下降解析器。这些大多类似于 ini 文件。这是某种类似 EBNF 形式的语言:

document     ::= { category }
category     ::= title {entry}
title        ::= "[" <name> "]"
entry        ::= <key> ":" <value>
Run Code Online (Sandbox Code Playgroud)

下面是一个在结尾处给出解析错误的文件示例:

[Category1]
key1:val1
key2 :val2
key3 : val3

[Category2]
key4: val4

this line right here should produce an error
Run Code Online (Sandbox Code Playgroud)

我可以在网上找到的所有示例都会解析输入,直到到达无效符号,然后退出而不打印有用的错误消息。我有一个遵循这种行为的工作解析器,但我不确定如何实现有用的错误报告。

例如,adocument由零个或多个类别组成。如果前两个类别解析没有错误,但第三个类别包含语法错误,我该怎么办?如果输入在第二个类别之后结束并且我无法解析第三个类别,因为没有留下标记(这不应该产生错误消息)怎么办?我如何区分这些情况?无效行可以通过两种方式变得有效:成为条目或成为标题。这让我很困惑。

我希望我的程序line 9: expected entry or title在到达上述输入的最后一行时打印类似的内容。人们通常如何在递归下降解析器中实现错误消息?

language-agnostic parsing recursive-descent ebnf

4
推荐指数
1
解决办法
2300
查看次数

阅读和理解Common Lisp(HyperSpec)文档

为了更深入地熟悉Common Lisp的工具,我发现自己在阅读文档时遇到了困难.即,难以理解所讨论的宏的用途将是什么样的.

例如,考虑一下:

do ({var | (var [init-form [step-form]])}*) (end-test-form result-form*) declaration* {tag | statement}*

如何解释括号?圆括号是否()对应于Lisp列表?什么是垂直条?大括号?星号?

我几乎可以阅读Unix手册页并很好地理解它们的语法; 然而,似乎这里发生了一些完全不同的事情.

lisp common-lisp ebnf hyperspec

4
推荐指数
1
解决办法
149
查看次数