有没有办法用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) 例如,
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(空字符串集)?
我必须使用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) 我正在编写自己的编程语言,并且我完成了令牌器(词法分析器).但是对于解析,我在编写递归下降解析器时遇到了麻烦.它似乎是正确的联想,应该留下,我不知道为什么.例如,它解析1-2-3为1-(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) 我启动了递归下降解析器,到目前为止它工作得很好。解析输入后返回“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) 我正在为一种虚构的编程语言编写一个递归的体面解析器。这是一种C样式的语言,具有==,<,>,<=和> =等常用运算符,并且还具有通用功能(如C#中的那些功能)。
在C#之类的语言中,要调用通用函数,您可以编写:
someFunction<T>(x);
Run Code Online (Sandbox Code Playgroud)
我的问题是,解析器如何区分通用参数与比较运算符(<和>)。
在我看来,上面的代码可能具有以下两种含义之一:
解析器将如何知道要使用哪种解释?
我最近遇到了 PEG 解析器,以及 Guido van Rossum关于 PEG 解析器的文章以及如何构建它们。那篇文章讨论了“PEG”解析器,但在内部它看起来就像一个递归下降解析器(生成器)。我推断 PEG 解析器与生成递归下降解析器有关,但我不确定。
递归下降解析器和 PEG 解析器有什么区别?我什么时候应该使用其中一个?
我正在尝试使用Perl&Parse :: RecDescent从文件中解析一些数据.我无法在perl脚本中抛出完整的数据文件,因为RecDescent需要几天的时间.因此,我将庞大的数据文件拆分为RD大小的块,以减少运行时间.
但是,我需要在平衡括号内提取部分,而我现在的例程并不健全(它过分依赖于来自换行符的最终闭括号的位置).例:
cell ( identifier ) {
keyword2 { };
...
keyword3 { keyword4 { } };
}
...more sections...
Run Code Online (Sandbox Code Playgroud)
我需要抓住所有东西,从cell ... {匹配的闭合},可以有不同数量的间距和子部分.
必须有一些linux命令行的东西才能轻松做到这一点?有任何想法吗?
编辑:输入文件大约8M,语法~60规则.
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) 我正在尝试在 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) 我有一组传入记录,需要在一组定义和存储的逻辑子句下进行评估。一个示例逻辑子句如下:
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) GCC/Clang 是手写解析器。我读到一篇文章说 C++ 不能被 LR(1) 解析器解析(Why can't C++ be parsed with a LR(1) parser?)。如果是这样,当 LR(1) 比递归下降更强大时,为什么 GCC/Clang 是手写的递归下降解析器?