标签: bnf

Scala Parser Token Delimiter问题

我正在尝试为下面的命令定义语法.

object ParserWorkshop {
    def main(args: Array[String]) = {
        ChoiceParser("todo link todo to database")
        ChoiceParser("todo link todo to database deadline: next tuesday context: app.model")
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个命令应该标记为:

action = todo
message = link todo to database
properties = [deadline: next tuesday, context: app.model]
Run Code Online (Sandbox Code Playgroud)

当我在下面定义的语法上运行此输入时,我收到以下错误消息:

[1.27] parsed: Command(todo,link todo to database,List())
[1.36] failure: string matching regex `\z' expected but `:' found

todo link todo to database deadline: next tuesday context: app.model
                                   ^
Run Code Online (Sandbox Code Playgroud)

据我所知,它失败了,因为匹配消息的单词的模式几乎与属性键的键的模式相同:值对,因此解析器无法分辨消息的结束位置和属性的开始.我可以通过坚持为每个属性使用开始令牌来解决这个问题,如下所示:

todo link todo to database :deadline: next tuesday …
Run Code Online (Sandbox Code Playgroud)

parsing scala bnf ebnf parser-combinators

10
推荐指数
1
解决办法
4904
查看次数

是否有工具可以在ANTLR和其他形式的BNF之间进行转换?

是否有任何工具可以将ANTLR语法语法转换为其他BNF语法?Backus-Naur形式(BNF,EBNF,ABNF,W3C-BNF,XBNF ......)有几种形式,有规格,例如见此列表.ANTLR语法语法似乎只是通过示例描述.我知道ANTLR语法文件包含的不仅仅是无上下文语法的规范,但你应该能够至少转换公共子集 - 有人自动完成吗?

antlr bnf context-free-grammar

10
推荐指数
3
解决办法
3214
查看次数

从yacc文件中提取BNF语法规则

我有一个描述某种语言的yacc文件,我正在使用IMP(eclipse项目)开发一个编辑器.我使用LPG作为解析器生成器,所以我需要从我的yacc文件中提取BNF规则.我收到的yacc文件包含规则和操作.但是,我想只提取要在LPG中使用的语法描述的规则.一种方法是通过手动提取规则并将其重新格式化为BNF语法(或者可以编写程序将其转换为我想要的方式).我想知道是否有自动执行此操作的方法.我在一些博客中读到野牛可以提供帮助,但我无法找到合适的命令.有谁知道如何处理这个问题.

我不能真正发布我所拥有的yacc文件,因为它是保密的.但我可举个例子如下

argExprList:
       assignExp
          {
            // some rules here 
          }
        | assignExpList ',' assignExp
            {
              //some other rules here
            }
        ;
Run Code Online (Sandbox Code Playgroud)

我希望它被转换成简单的样子

argExpList ::= assignExp|assignExpList ',' assignExp
Run Code Online (Sandbox Code Playgroud)

grammar parsing yacc bnf imp

10
推荐指数
1
解决办法
1384
查看次数

解析器生成器在给定BNF语法的情况下输出C#?

如果我给它一个BNF语法,我正在寻找能够构建解析器(在C#中)的工具(例如http://savage.net.au/SQL/sql-2003-2.bnf)

这样的发电机存在吗?

c# parsing bnf

9
推荐指数
3
解决办法
1万
查看次数

我在哪里可以获得学习EBNF的材料?

延伸巴克斯 - 诺尔形式:EBNF

我是解剖概念的新手.在哪里可以获得足够的易读性和遵循材料来编写boost :: spirit库的语法,它使用类似于EBNF的语法?

目前我正在研究维基百科的EBNF.

compiler-construction parsing boost bnf ebnf

9
推荐指数
2
解决办法
1681
查看次数

这个ParseKit BNF有什么问题?

我正在使用ParseKit作为Objective-C,它采用类似BNF的语法来指定语法:

@start = command+;
command = new;
new = 'new' object ';';
object = 'house' | other;
Run Code Online (Sandbox Code Playgroud)

包含最后一行会导致错误.基本上我想说一个物体可以是房子或其他东西.非终端元素"其他"应该捕获那些不是房子的字.

我是否以错误的方式讨论"任何地方"的想法?

谢谢!

parsing objective-c bnf parser-generator parsekit

9
推荐指数
2
解决办法
931
查看次数

TN SQL的BNF表示法

你知道在哪里可以得到最新版本的T-SQL的BNF(Backus Naur Form)表示法.这是微软版本,我找不到任何东西.我发现SQL2修订后的ISO标准在这里也被称为SQL92,但它似乎缺少微软的T-SQL的某些功能

sql t-sql bnf

9
推荐指数
3
解决办法
4156
查看次数

将BNF语法转换为pyparsing

如何使用正则表达式(或pyparsing更好?)来描述下面提供的脚本语言(Backus-Naur Form):

<root>   :=     <tree> | <leaves>
<tree>   :=     <group> [* <group>] 
<group>  :=     "{" <leaves> "}" | <leaf>;
<leaves> :=     {<leaf>;} leaf
<leaf>   :=     <name> = <expression>{;}

<name>          := <string_without_spaces_and_tabs>
<expression>    := <string_without_spaces_and_tabs>
Run Code Online (Sandbox Code Playgroud)

脚本示例:

{
 stage = 3;
 some.param1 = [10, 20];
} *
{
 stage = 4;
 param3 = [100,150,200,250,300]
} *
 endparam = [0, 1]
Run Code Online (Sandbox Code Playgroud)

我使用python re.compile并希望将所有内容分组,如下所示:

[ [ 'stage',       '3'],
  [ 'some.param1', '[10, 20]'] ],

[ ['stage',  '4'],
  ['param3', '[100,150,200,250,300]'] ],

[ ['endparam', '[0, 1]'] ] …
Run Code Online (Sandbox Code Playgroud)

python regex bnf pyparsing

9
推荐指数
1
解决办法
1840
查看次数

在 .bnf 中固定和恢复(解析)

我已经在互联网上进行了广泛的搜索(现在至少有半天了),但似乎找不到所需的答案。

目前我正在尝试为.bnf-file具有自定义语言支持的 IntelliJ 插件创建一个。

一些教程提到了{pin=1},{pin=2}和的存在{recoverWhile=xyz},但我没有找到关于它们用途的任何真正解释,如果还有其他我应该知道的事情(也许 a{pin=3}也存在?)。

那么有人可以告诉我这些标志、方法或它们的名称究竟是什么,以及如何在我的 .bnf 中使用它们吗?

谢谢你的帮助和最好的问候,Fuchs

parsing intellij-idea bnf intellij-plugin grammar-kit

9
推荐指数
1
解决办法
746
查看次数

如何向 HTCPCP 服务器发送一杯奶油咖啡和一杯香草的 BREW 请求

我正在尝试向实现超文本咖啡壶控制协议(HTCPCP/1.0,在 RFC 2324 中定义)的服务器发送 BREW 请求,该协议是使用 cURL 构建在 HTTP 之上的协议。

我想煮一杯加奶油和一杯香草糖浆的咖啡,但到目前为止我的所有请求都被服务器拒绝了。

令人困惑的是,RFC 规定 Content-Type 必须设置为“application/coffee-pot-command”(第 2.11 节),但也规定 Content-Type 必须设置为“message/coffeepot”(第 4 节),另外还规定“message/coffeepot”的内容必须包含coffee-message-body,定义为coffee-message-body =“start”|“stop”)。我选择了“application/coffee-pot-command”,纯粹是把它放在第一位(但我两种都尝试过)。

接下来,我添加了一个“Accept-Additions”标题,将牛奶类型指定为“奶油”,将糖浆类型指定为“香草”。RFC 概述了此标头的 BNF:

   Accept-Additions = "Accept-Additions" ":"
                      #( addition-range [ accept-params ] )

    addition-type   = ( "*"
                      | milk-type
                      | syrup-type
                      ) *( ";" parameter )
    milk-type       = ( "Cream" | "Half-and-half" | "Whole-milk"
                      | "Part-Skim" | "Skim" | "Non-Dairy" )
    syrup-type      = ( "Vanilla" | "Almond" | "Raspberry"
                      | "Chocolate" )
Run Code Online (Sandbox Code Playgroud)

我对这部分的最佳猜测是我需要添加以下标头:

--header "Accept-Additions: Skim;1,Vanilla;1"
Run Code Online (Sandbox Code Playgroud)

虽然我没有解释 BNF …

curl bnf

9
推荐指数
1
解决办法
1386
查看次数