peg相关内容
我正在开发Qt的qmake项目文件解析器(开源项目)。 我在描述qmake的条件语句变体时遇到了麻烦,在文档中称为“作用域”。 EBNF(简化): ScopeStatement -> Condition ScopeBody Condition -> Identifier | TestFunctionCall | NotExpr | OrExpr | AndExpr NotExpr -
..
这是一个演示代码 标签:变量 ID让 ID = 10转到标签 如果允许关键字作为标识符将 让:无功无功让无功 = 10去让 这是完全合法的代码.但是在 antlr 中似乎很难做到这一点. AFAIK,如果 antlr 匹配令牌 let,则永远不会回退到 id 令牌.所以对于antlr,它会看到 LET_TOKEN :VAR_TOKEN VAR_TOKENLET_TOKEN VA
..
这是一个演示代码 标签:变量 ID让 ID = 10转到标签 如果允许关键字作为标识符将 让:无功无功让无功 = 10去让 这是完全合法的代码.但是在 antlr 中似乎很难做到这一点. AFAIK,如果 antlr 匹配令牌 let,则永远不会回退到 id 令牌.所以对于antlr,它会看到 LET_TOKEN :VAR_TOKEN VAR_TOKENLET_TOKEN VA
..
我正在设计一种音乐编程语言,并将其语法实现为PEG语法.解析过程最终变得相当复杂,因此,最简单的方法似乎是定义多个单独的语法,然后按顺序应用它们.到目前为止,我有三种语法: 获取源文件的全部内容,并删除注释. 获取源文件(已删除注释)并按仪器将其分开.这将导致成对的乐器名称/定义以及所述乐器“播放"的“音乐代码". 实际上是解析音乐代码并返回音乐“事件"的解析树. 在三个解析器中,
..
在PEG.js中,我有以下规则 label = l:[a-zA-Z\$\#\% ]* { return word(l); } block = "[" l:label "]" { return l; } option = "\n"* key:block value:label "\n"? {return {key : value}; } 如果解析[hello] world,则结果
..
我正在寻找与以下对象匹配的peg.js语法表达式: "variable"#失败 "variable."#失败 ""#失败 "variable.variable"#确定 "variable.variable.variable.variable.variable"#确定 我希望输入 {PATH: "variable.variable"} {PATH: "variable.v
..
使用 https://github.com/JetBrains/Grammar-Kit 如何重写没有左递归的语法? grammar ::= exprs exprs::= (sum_expr (';')?)* private sum_expr::= sum_expr_infix | sum_expr_prefix sum_expr_infix ::= number sum_expr_prefi
..
我正在还原最初基于Perl构建的一种迷你语言(请参见 github上的Chessa#),但是我在应用语义时遇到了很多问题. 这是语法: (* integers *) DEC = /([1-9][0-9]*|0+)/; int = /(0b[01]+|0o[0-7]+|0x[0-9a-fA-F]+)/ | DEC; (* floats *) pointfloat = /([0-9]*\.
..
我正在使用 TextX Python库(基于琶音 PEG解析器) 但是当我尝试使用它来解析文件时,出现了异常: RecursionError: maximum recursion depth exceeded while calling a Python object 这是引发此异常的最小示例: #!/usr/bin/env python from textx import
..
我正在自给自足地为Mac编写一个开源文本编辑器,终于达到了我要添加语法突出显示的地步.在过去的几天里,我一直在反复研究各种解决方案,最后我决定向更广泛的受众开放这个问题. 以下是我看到的选项: 基本上通过一系列 regex模式匹配来定义语言(类似于TextMate定义其语言的方式) 使用形式语法定义语言,例如BNF或PEG 使用正则表达式模式匹配似乎不太理想,因为它不能正式代表
..
我刚开始玩PEG.js,语法有问题(调试时大大简化了): start = presingle single / preplural plural presingle = "a" / "b" preplural = "b" / "c" single = "d" / "e" plural = "dd" / "ee" 我正在使用 https://
..
我正在使用 Python Parsimonious Parser 尝试为一种简单的语言构建解释器, m设计.我观看了教程视频,它非常有用,现在我正在慢慢修改代码符合我自己的规则.我陷入了最初定义为的分配规则: def assignment(self, node, children): 'assignment = lvalue "=" expr' lvalue, _, expr
..
我正在尝试匹配 f(some_thing) == 'something else' f(some_thing)是一个函数调用,它是一个表达式 == 是布尔运算符 “其他" 是一个字符串,它也是一个表达式 因此布尔表达式应为 expression operator expression 问题是我不知道如何在没有左递归的情况下做到这一点 这些是我的规则 expres
..
我想用我的语法忽略空白和换行,以便 语法 start = 'a'? sep+ ('cat'/'dog') sep* '(' sep* stmt_list sep* ')' stmt_list = exp: [a-zA-Z]+ { return new Array(exp.join('')) } sep = [' '\t\r\n] 测试用例 a dog( Harry
..
我已经看到一些主张,通常说来,优化的PEG解析器不能比优化的LALR(1)或LL(k)解析器快. (当然,解析的性能取决于特定的语法.) 我想知道PEG解析器是否有任何特定限制,无论是对一般语法还是对某些使它不如LALR(1)或PEG语法的子集有效的语法, LL(k)性能方面. 我特别对解析器生成器感兴趣,但是假设可以在任何特定情况下调整它们的输出以提高性能.我还假设解析器已经过优化,
..
我想用以下内容的行来解析文件: simple word abbr -8. (012) word, simple phrase, one another phrase - (simply dummy text of the printing; Lorem Ipsum : "Lorem" - has been the industry's standard dummy text, ever si
..
我的同事PaulS问我以下问题: 我正在为一种现有的语言(SystemVerilog-IEEE标准)编写一个解析器,并且该规范中包含一个规则,该规则的结构与此类似: cover_point = [[data_type] identifier ':' ] 'coverpoint' identifier ';' ; data_type =
..
这是演示代码 label: var id let id = 10 goto label 如果允许的关键字作为标识符将是 let: var var let var = 10 goto let 这是完全合法的代码.但是在antlr中执行此操作似乎非常困难. AFAIK,如果antlr与令牌let匹配,则永远不会回退到id令牌.因此对于antlr,它将看到 LET_TOK
..
您将如何在以下任何解析器生成器中编写解析表达式语法( PEG.js ,尚不存在的编程语言的示例: square x = x * x cube x = x * square x fib n = if n
..
从此维基百科页面: 之间的根本区别 上下文无关的语法和解析 表达语法是PEG的 选择运算符已订购.如果 第一个选择成功,第二个 替代方案被忽略.因此下令 选择不是可交换的,不像 无序选择,如无上下文 语法和正则表达式. 有序选择类似于软 削减一些逻辑运算符 编程语言. 为什么PEG的选择运算符会使匹配短路?是因为要尽量减少内存使用(由于记忆)? 我不确定正则表达式中的选择运算符是
..