标签: recursive-descent

jQuery - 选择同一级别的孩子(奇数或偶数)

有没有办法用jQuery替换下面的CSS?

.quote-body .quote-body { background: #f5f5f5 }
.quote-body .quote-body .quote-body { background: #fff }
.quote-body .quote-body .quote-body .quote-body { background: #f5f5f5 }
.quote-body .quote-body .quote-body .quote-body .quote-body { background: #fff }
...
and so on
Run Code Online (Sandbox Code Playgroud)

css jquery recursive-descent

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

在 Java 中编写递归下降解析来解析 epsilon(?)

例如,

EBNF

A ::= B c;

B ::= T1 | T2 | ?

T1 ::= 一个

T2 ::= b

parseA()
{
switch(currentToken.kind){
case Token.a :
    parseT1();
case Token.b :
    parseT2();
break;

case <epsilon> :
    
break;
default:
    // report error
break;
}
}
Run Code Online (Sandbox Code Playgroud)

如何编写解析器在 Java 中解析 epsilon(空字符串集)?

java compiler-construction parsing recursive-descent

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

为我的语法编写递归后代解析器

我必须使用Recursive Descendent Parser Builder构建表达式.

这是我的语法:

----RULES----
<cond> ? <termb> [OR <termb>]*
<termb>?<factb>[AND <factb>]*
<factb>?<expr> RELOP <expr> | NOT <factb> | OPAR <cond> CPAR
<expr> ? [PLUS | MINUS] <term> [(PLUS <term>) | (MINUS <term>)]*
<term> ? <termp> [(MULT <termp>) | (DIV <termp>) | (REM <termp>)]*
<termp> ? <fact> [POWER <fact>]*
<fact> ? ID | NUM | OPAR1 <expr> CPAR1
----TERMINALS----
ID ? ("A" | ... | "Z" | "a" | ...| "z") [("A"| ... | "Z" | "a" | ...| …
Run Code Online (Sandbox Code Playgroud)

java parsing builder recursive-descent

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

为什么我的递归下降解析器是右关联的

我正在编写自己的编程语言,并且我完成了令牌器(词法分析器).但是对于解析,我在编写递归下降解析器时遇到了麻烦.它似乎是正确的联想,应该留下,我不知道为什么.例如,它解析1-2-31-(2-3),而不是正确的(1-2)-3.

我已经删除了大部分其他代码,只留下了可重复的内容:

using System.Collections.Generic;

namespace Phi
{
    public enum TokenType
    {
        Plus, // '+'
        Minus, // '-'
        IntegerLiteral,
    }

    public interface INode
    {
        // Commented out as they aren't relevant
        //NodeType GetNodeType();
        //void Print(string indent, bool last);
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Token> tokens = new List<Token>()
            {
                new Token(TokenType.IntegerLiteral, "1"),
                new Token(TokenType.Minus, ""),
                new Token(TokenType.IntegerLiteral, "2"),
                new Token(TokenType.Minus, ""),
                new Token(TokenType.IntegerLiteral, "3"),
            };

            int consumed = ParseAdditiveExpression(tokens, out INode …
Run Code Online (Sandbox Code Playgroud)

c# recursive-descent associativity

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

我需要使用堆栈来实现递归下降解析器吗?

我启动了递归下降解析器,到目前为止它工作得很好。解析输入后返回“ACCEPT”或“REJECT”。但是,我在网上和另一本教科书上看到他们正在“使用 PDA 进行自上而下的解析”。所以,我只是想确认这只是解析器编码的另一种方式,而不是方式。我的解析器看起来像这样:

public class Parser {

private int n = 0;
private Tokens token = Main.TokenList.get(n);

public Parser() {
        Boolean bool = parse_Program();
        if (bool){
            System.out.println("ACCEPT");
        }else System.out.println("REJECT");

}

Boolean parse_Program(){
    if (!parse_DeclarationList()){
         return false;
    }
    return true;
}

private boolean parse_DeclarationList() {
    if (!parse_Declaration()){
        return false;
    }
    if(!parse_DeclarationListPrime()){
          return false;
    }
    return true;
}

private boolean parse_DeclarationListPrime() {
        if (token.getContents().equals("int") || token.getContents().equals("void") || token.getContents().equals("float")) {
            if (!parse_Declaration()) {
                return false;
            }else return true;
        }else if (token.getContents().equals("$")){
            return true; …
Run Code Online (Sandbox Code Playgroud)

compiler-construction recursive-descent

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

How do parsers handle generic type parameters?

我正在为一种虚构的编程语言编写一个递归的体面解析器。这是一种C样式的语言,具有==,<,>,<=和> =等常用运算符,并且还具有通用功能(如C#中的那些功能)。

在C#之类的语言中,要调用通用函数,您可以编写:

someFunction<T>(x);
Run Code Online (Sandbox Code Playgroud)

我的问题是,解析器如何区分通用参数与比较运算符(<和>)。

在我看来,上面的代码可能具有以下两种含义之一:

  • 用通用参数“ T”和常规参数“ x”调用“ someFunction”
  • 计算表达式'(someFunction <T)> x',将'someFunction','T'和'x'视为正则变量

解析器将如何知道要使用哪种解释?

c# generics parsing programming-languages recursive-descent

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

PEG 和递归下降解析器之间的区别?

我最近遇到了 PEG 解析器,以及 Guido van Rossum关于 PEG 解析器文章以及如何构建它们。那篇文章讨论了“PEG”解析器,但在内部它看起来就像一个递归下降解析器(生成器)。我推断 PEG 解析器与生成递归下降解析器有关,但我不确定。

递归下降解析器和 PEG 解析器有什么区别?我什么时候应该使用其中一个?

parsing recursive-descent peg

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

有没有一种简单的方法可以将文本文件分块到支撑平衡部分?

我正在尝试使用Perl&Parse :: RecDescent从文件中解析一些数据.我无法在perl脚本中抛出完整的数据文件,因为RecDescent需要几天的时间.因此,我将庞大的数据文件拆分为RD大小的块,以减少运行时间.

但是,我需要在平衡括号内提取部分,而我现在的例程并不健全(它过分依赖于来自换行符的最终闭括号的位置).例:

cell ( identifier ) {
  keyword2 { };
  ...
  keyword3 { keyword4 {  } };
}

...more sections...
Run Code Online (Sandbox Code Playgroud)

我需要抓住所有东西,从cell ... {匹配的闭合},可以有不同数量的间距和子部分.

必须有一些linux命令行的东西才能轻松做到这一点?有任何想法吗?

编辑:输入文件大约8M,语法~60规则.

algorithm perl parsing recursive-descent

2
推荐指数
1
解决办法
728
查看次数

基于递归下降的计算器堆栈溢出

TL; DR:

我的计算器语法依赖于递归下降到彼此内部嵌套括号组,但是太多嵌套的parens(大约20个)会导致堆栈溢出.我怎样才能解决这个问题?有没有办法让问题更平坦?

长表:

不久之前 - 我的脑袋深深陷入了小规模的嵌入式系统 - 没有半脑的人会遇到堆栈溢出.现在因为更抽象的任务而感到谦卑,我来这里寻求建议.

激励项目是Android的计算器.目前的计算器在很多方面都显得不够,但我今天没带上我的肥皂盒,所以我只是直接遇到我遇到的问题:堆栈溢出!

具体来说,当用户创建太多嵌套括号组时,包括函数等.这是因为我的计算器依赖于ANTLR语法,这意味着它使用递归下降.方便地,这允许它通过PEMDAS连续运行,允许容易地计算嵌套函数和括号.但!我发现 - 根据电话 - 按下parens按钮20次左右会导致崩溃,这是由于调用堆栈产生的堆栈溢出导致大约100个函数调用深度,这是递归下降方法的自然结果.

我知道,flat比嵌套更好,但它下降的4个级别(函数)是完全必要的,而其他几个级别使我的生活在对数上变得更容易.即使删除这些级别也无法解决问题:用户仍然可以在几分钟内导致系统崩溃.有一个"太多的parens!" 错误信息是坏的(这是其他计算器之一会做的事情).另外,我使用AST输出来格式化输入字符串以使其非常类似,因此预先计算parens组会使整个系统有点过于复杂.

所以,问题:

即使问这个问题似乎很愚蠢,但是:有没有办法在ANTLR中实现一个语法,它可以解析和解释复杂和深度嵌套的表达式而不会爆炸调用堆栈?

语法:

grammar doubleCalc;

options {
    language = Java;
    output = AST;
//  k=2;
}

// Calculation function.
prog returns [double value]
    :   e=addsub EOF {$value = $e.value;}
    ;

addsub returns [double value]
    :   e=muldiv {$value = $e.value;}
        (   PLUS^ e=muldiv {$value += $e.value;}
        |   MINUS^ e=muldiv {$value -= $e.value;}
        )*
    ;

muldiv returns [double value]
    :   e=power {$value = …
Run Code Online (Sandbox Code Playgroud)

antlr recursive-descent

2
推荐指数
1
解决办法
1058
查看次数

C#或F#用于解析类似于压痕的语言?

为了在.NET中为类似Slim的模板语言(用于ASP)构建解析器,哪种语言更适合C#或F#?(对我而言,F#似乎更科学,更适合此类任务..)

除了语言选择,这两种技术中的哪一种适用于解析语言,其中有2空间递增缩进来描述嵌套/块(例如; Slim,Haml或SCSS):递归下降解析递归上升解析

OAN,在.NET中是否有对RDP或RAP的OOTB支持?或者一个通用的,优雅的第三方解析库像Java的半熟

c# f# parsing recursive-descent slim-lang

2
推荐指数
1
解决办法
324
查看次数

使用递归下降解析 F# 中的嵌套括号

我正在尝试在 F# 中创建一个递归下降解析器。我查看了http://www.fssnip.net/bM,但这种类型的解析器使用字符串而不是列表。

我正在努力解析括号,尤其是嵌套括号。有很多解析器失败的边缘情况。

我使用以下数据类型来表示令牌。

type Token =
    | ParOpen
    | ParClose
    | Identifier of string
    | IntLiteral of int
    | Add

let example = [ParOpen;IntLiteral 3;Token.Add;IntLiteral 5;ParClose]
Run Code Online (Sandbox Code Playgroud)

下面的数据类型用于表示 AST 中的节点。这有点像生产规则。

type Expression =
  | Add of Expression * Expression
  | Par of Expression
  | Constant of int
  | Leaf //not used currently
Run Code Online (Sandbox Code Playgroud)

例如,下面的函数可用于解析“3 + 5”。但是在解析括号时它不适用于大多数情况。例如“(3 + 5) + 1”将失败。

let rec parse listOfTokens = 
    match listOfTokens with
    | IntLiteral i::Token.Add::list -> Add(Constant i, parse list)
    | IntLiteral …
Run Code Online (Sandbox Code Playgroud)

f# parsing recursive-descent abstract-syntax-tree

2
推荐指数
1
解决办法
126
查看次数

java复杂逻辑条件解析器

我有一组传入记录,需要在一组定义和存储的逻辑子句下进行评估。一个示例逻辑子句如下:

Acct1 != 'Y' AND Acct2 > 1004 AND Acct3 >= 96 AND Acct4 < 1004 AND Acct5 = 99 AND ((Acct6 <= 9090 OR Acct7 IN (A1,A2,A6) AND Acct1 NOT IN (A3,A4)) AND Formatted LIKE 'LINUX' AND Acct9 NOT LIKE 'WINDOWS' AND (Acct10 = 'N' AND NOT Acct11 = 'N') AND EditableField BETWEEN (10 AND 20) )
Run Code Online (Sandbox Code Playgroud)

我输入到该条款​​的数据如下:

map.put(Acct1,"Y")
map.put(Acct2,1010)
map.put(Acct3,99)
map.put(Acct4,1015)
map.put(Acct5,99)
map.put(Acct6,9090)
map.put(Acct7,"A3")
map.put(Formatted,"LINUX_INST")
map.put(Updated,"LINUX_TMP")
map.put(Acct10,"Y")
map.put(Acct11,"N")
map.put(EditableFIeld,25)
Run Code Online (Sandbox Code Playgroud)

我必须将填充到映射中的传入记录评估到上面定义的子句上,并根据评估结果打印 true 或 false。

子句条件和映射值也将被更改和执行。

我有以下条件子句需要评估:

!=
>
>= …
Run Code Online (Sandbox Code Playgroud)

java algorithm parsing recursive-descent logical-operators

0
推荐指数
1
解决办法
3249
查看次数

如果 LR(1) 解析器无法解析 c++,gcc/clang 如何解析它?

GCC/Clang 是手写解析器。我读到一篇文章说 C++ 不能被 LR(1) 解析器解析(Why can't C++ be parsed with a LR(1) parser?)。如果是这样,当 LR(1) 比递归下降更强大时,为什么 GCC/Clang 是手写的递归下降解析器?

c++ grammar parsing recursive-descent lr-grammar

0
推荐指数
1
解决办法
685
查看次数