peg相关内容

Antlr4如何建立一个语法允许关键字作为标识符

这是一个演示代码 标签:变量 ID让 ID = 10转到标签 如果允许关键字作为标识符将 让:无功无功让无功 = 10去让 这是完全合法的代码.但是在 antlr 中似乎很难做到这一点. AFAIK,如果 antlr 匹配令牌 let,则永远不会回退到 id 令牌.所以对于antlr,它会看到 LET_TOKEN :VAR_TOKEN VAR_TOKENLET_TOKEN VA ..
发布时间:2021-11-11 03:57:03 其他开发

Antlr4如何建立一个语法允许关键字作为标识符

这是一个演示代码 标签:变量 ID让 ID = 10转到标签 如果允许关键字作为标识符将 让:无功无功让无功 = 10去让 这是完全合法的代码.但是在 antlr 中似乎很难做到这一点. AFAIK,如果 antlr 匹配令牌 let,则永远不会回退到 id 令牌.所以对于antlr,它会看到 LET_TOKEN :VAR_TOKEN VAR_TOKENLET_TOKEN VA ..
发布时间:2021-11-11 03:33:42 其他开发

PEG语法在多次遍历中解析常见吗?

我正在设计一种音乐编程语言,并将其语法实现为PEG语法.解析过程最终变得相当复杂,因此,最简单的方法似乎是定义多个单独的语法,然后按顺序应用它们.到目前为止,我有三种语法: 获取源文件的全部内容,并删除注释. 获取源文件(已删除注释)并按仪器将其分开.这将导致成对的乐器名称/定义以及所述乐器“播放"的“音乐代码". 实际上是解析音乐代码并返回音乐“事件"的解析树. 在三个解析器中, ..
发布时间:2020-07-02 20:20:00 其他开发

grako的规则优先级问题

我正在还原最初基于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]*\. ..
发布时间:2020-06-13 18:51:03 Python

为文本编辑器定义语法的最佳方法是什么?

我正在自给自足地为Mac编写一个开源文本编辑器,终于达到了我要添加语法突出显示的地步.在过去的几天里,我一直在反复研究各种解决方案,最后我决定向更广泛的受众开放这个问题. 以下是我看到的选项: 基本上通过一系列 regex模式匹配来定义语言(类似于TextMate定义其语言的方式) 使用形式语法定义语言,例如BNF或PEG 使用正则表达式模式匹配似乎不太理想,因为它不能正式代表 ..
发布时间:2020-05-25 01:30:40 其他开发

简约解析器-尝试解析分配语法时出错

我正在使用 Python Parsimonious Parser 尝试为一种简单的语言构建解释器, m设计.我观看了教程视频,它非常有用,现在我正在慢慢修改代码符合我自己的规则.我陷入了最初定义为的分配规则: def assignment(self, node, children): 'assignment = lvalue "=" expr' lvalue, _, expr ..
发布时间:2020-05-25 01:14:05 Python

解析布尔表达式而无需左手递归

我正在尝试匹配 f(some_thing) == 'something else' f(some_thing)是一个函数调用,它是一个表达式 == 是布尔运算符 “其他" 是一个字符串,它也是一个表达式 因此布尔表达式应为 expression operator expression 问题是我不知道如何在没有左递归的情况下做到这一点 这些是我的规则 expres ..
发布时间:2020-05-25 01:02:59 其他开发

解析器的性能:PEG与LALR(1)或LL(k)

我已经看到一些主张,通常说来,优化的PEG解析器不能比优化的LALR(1)或LL(k)解析器快. (当然,解析的性能取决于特定的语法.) 我想知道PEG解析器是否有任何特定限制,无论是对一般语法还是对某些使它不如LALR(1)或PEG语法的子集有效的语法, LL(k)性能方面. 我特别对解析器生成器感兴趣,但是假设可以在任何特定情况下调整它们的输出以提高性能.我还假设解析器已经过优化, ..
发布时间:2020-05-25 01:00:51 其他开发

Antlr4如何构建语法允许的关键字作为标识符

这是演示代码 label: var id let id = 10 goto label 如果允许的关键字作为标识符将是 let: var var let var = 10 goto let 这是完全合法的代码.但是在antlr中执行此操作似乎非常困难. AFAIK,如果antlr与令牌let匹配,则永远不会回退到id令牌.因此对于antlr,它将看到 LET_TOK ..
发布时间:2020-05-25 00:27:06 其他开发

PEG和CFG有什么区别?

从此维基百科页面: 之间的根本区别 上下文无关的语法和解析 表达语法是PEG的 选择运算符已订购.如果 第一个选择成功,第二个 替代方案被忽略.因此下令 选择不是可交换的,不像 无序选择,如无上下文 语法和正则表达式. 有序选择类似于软 削减一些逻辑运算符 编程语言. 为什么PEG的选择运算符会使匹配短路?是因为要尽量减少内存使用(由于记忆)? 我不确定正则表达式中的选择运算符是 ..