标签: parser-generator

解析scala中的递归结构

我正在尝试在scala中构造一个解析器,它可以解析类似SQL的字符串.我已经掌握了基础知识并且可以解析类似的东西:

select id from users where name = "peter" and age = 30 order by lastname
Run Code Online (Sandbox Code Playgroud)

但现在我想知道如何解析嵌套和类,即

select name from users where name = "peter" and (age = 29 or age = 30)
Run Code Online (Sandbox Code Playgroud)

我的'combinedPredicate'的当前产量如下:

def combinedPredicate = predicate ~ ("and"|"or") ~ predicate ^^ {
  case l ~ "and" ~ r => And(l,r)
  case l ~ "or" ~ r => Or(l,r)
}
Run Code Online (Sandbox Code Playgroud)

我尝试以递归方式引用内部的combinedPredicate生成,但这会导致堆栈溢出.

顺便说一句,我只是在这里试验......没有实现整个ansi-99规范;)

parsing scala parser-generator

7
推荐指数
2
解决办法
3213
查看次数

在野牛推进纯粹的解析器堆处理

有没有办法为堆管理指定我自己的allocator/deallocator函数而不是malloc()/ free()用于bison中的纯推送解析器?

c language-design bison parser-generator

7
推荐指数
1
解决办法
520
查看次数

Objective C的解析器生成器?

我被建议使用Parser Generator为我的域特定语言创建解析器.

理想情况下,我希望它输出一个Objective-C解析器并使用BNF输入来描述语言.

似乎很少有选择..是否有可能使用一个更受欢迎的具有目标C的解析器生成器?

谢谢!

compiler-construction parsing programming-languages objective-c parser-generator

7
推荐指数
2
解决办法
3088
查看次数

野牛java的例子

有没有人知道是否有一些教程和/或网上使用GNU Bison和Java的例子.我在网上搜索过.但我没有找到任何东西.我试图实现一个例子,但我无法编译它(因为我也需要一个词法分析器).这是我的例子:

%{
  static void main(String[] args) {
    yyparse();
  }
%}

%union {
  int     number;
  char    operator;
}

%language "Java"

%token<number>   NUMBER 
%token<operator> OPERATOR  

%type <number> exp

%left OPERATOR
%%

input
    : /* Empty string */
    | exp { System.out.print("Result >> " + $1); }
    ;

exp
    : NUMBER
    | exp OPERATOR exp { 
        switch($2) {
            case '+': $$ = $1 + $3; break;
            case '-': $$ = $1 - $3; break;
            case '*': $$ = $1 * $3; break; …
Run Code Online (Sandbox Code Playgroud)

java grammar yacc bison parser-generator

7
推荐指数
1
解决办法
7389
查看次数

多个flex/bison解析器

在项目中处理多个Flex/Bison解析器的最佳方法是什么?

我写了一个解析器,现在我需要在同一个项目中使用第二个解析器.到目前为止,在parser1.y我插入main(..)方法的第三部分并yyparse从那里调用.

我想获得是一种有两个不同的解析器(什么parser1.yparser2.y),并能够从外部函数中使用它们(让我们假设mainmain.cpp).

我应该使用哪些预防措施来导出文件yyparse外的函数.y以及如何处理两个解析器?

PS.我正在使用g ++编译而不是Flex和Bison的C++版本,我想保持这种方式(因此避免将解析器封装在对象中).

yacc lex bison parser-generator

6
推荐指数
3
解决办法
4854
查看次数

什么类型的解析器是野牛?

什么类型的解析器是野牛.它是LALR(1)还是LR(1)?

parser-generator

6
推荐指数
1
解决办法
1199
查看次数

如何从默认和隐藏通道中读取Antlr Parser规则

我使用正常的空白分隔到隐藏的通道,但我有一个规则,我想包括任何空格以便以后处理,但我发现的任何例子都需要一些非常奇怪的手动编码.

没有简单的选项可以从多个渠道中读取,例如从一开始就将空白放在那里的选项.

防爆.这是WhiteSpace词法分析器规则

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;
Run Code Online (Sandbox Code Playgroud)

这是我的规则,我想包括空格

raw :   '{'? (~('{'))*;
Run Code Online (Sandbox Code Playgroud)

基本上它捕获所有规则来捕获与其他模式不匹配的其他规则的内容,因此我需要原始流.

我希望有一个{$channel==DEFAULT || $channel==HIDDEN}语法示例,但找不到任何.

我的目标是C#,但如果需要,我可以重写Java示例.

antlr parser-generator lexer antlr3

6
推荐指数
1
解决办法
3227
查看次数

谁更快:PEG还是GLR?

我正在尝试lintC/AL编程语言创建某种工具.所以基本上我需要对源代码执行语法和词法分析.我打算从头开始编写解析器,但后来发现有很多工具可以帮助自动生成这些解析器.

我需要性能,因为在一个部分中检查20兆字节的代码是正常情况,我需要该工具可以通过自定义规则进行扩展.所以我决定使用JavaScript.

据我发现两个发生器我可以使用JisonPEG.js.

哪一个给我更多的解析性能?也许不是比较库,而是算法?

哪一个更适合我的需求(解析通用编程语言)?

更新: 我发现了类似的问答:

javascript performance peg parser-generator glr

6
推荐指数
2
解决办法
3860
查看次数

解析表达式语法是否适合解析shell命令语言?

POSIX shell命令语言不易解析,主要是因为lexing和解析之间的紧密耦合.

但是,解析表达式语法(PEG)通常是无扫描的.通过结合lexing和解析,我似乎可以避免这些问题.我正在使用的语言(Rust)有一个维护良好的PEG库.但是,我知道有三个困难可能使得使用这个库变得不切实际:

  • shell必须能够逐行解析,而不是读取超过行尾的字符.
  • 别名纯粹是词法,并且在某些情况下可以使令牌被任何其他令牌序列替换
  • Shell保留字仅在某些情况下被识别

PEG是否适合在给定这些要求的情况下解析shell命令语言,或者是一个手写的递归下降解析器更适合?

shell parsing peg parser-generator rust

6
推荐指数
1
解决办法
507
查看次数

在ScalaCheck中从语法生成字符串

在Scala中,我使用Parser Combinators库实现了语法.现在,我想要做的是从解析器组合器库中生成给定语法的随机字符串.

在我看来,ScalaCheck库在某种程度上与Parser Combinators相反,因为它结合了生成器而不是解析器.

是否已经有一种使用Parser Combinators或ScalaCheck生成字符串的方法,或者是否有直接的方法将Parser Combinator转换为生成器?

code-generation scala parser-generator quickcheck scalacheck

6
推荐指数
1
解决办法
115
查看次数