问题标签 [ometa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4127 浏览

parsing - 是什么让 Ometa 与众不同?

Ometa是“一种新的面向对象的模式匹配语言”。我之前在 Oz 工具等语言中遇到过模式匹配,用于解析 Lexx/Yacc 或 Pyparsing 等语法。尽管查看示例代码、阅读讨论并与朋友交谈,但我仍然无法真正理解 Ometa 的特别之处(或者至少,为什么有些人认为它如此)。有什么解释吗?

0 投票
1 回答
222 浏览

parsing - 如何将单词与 OMetaJS 匹配?

我一直在尝试使用OMeta/JS来学习 OMeta ,但我似乎陷入了一些应该非常简单的事情上。如果我有语法

它产生预期的输出

我也可以使用

哪个生产

但是当我尝试使用解析整个单词时

我收到一个错误

我误解了什么,如何修复 W2 语法以输出“hi”?

0 投票
1 回答
209 浏览

javascript - 如何使用 ometa-js

任何人都可以解释如何让示例运行?

我从github下载了ometa-js rep,打开了index.htm,结果报错。每当我做任何事情时, http: //www.tinlizzie.org/ometa-js上的托管版本都会在源代码中显示错误。

// 一个简单的识别器,不会产生有用的值

ometa L { number = digit+, addExpr = addExpr '+' mulExpr | addExpr '-' mulExpr | mulExpr, mulExpr = mulExpr '*' primExpr | mulExpr '/' primExpr | primExpr, primExpr = '(' expr ')' | 数,expr = addExpr }

L.matchAll('6*(4+3)', 'expr')

0 投票
2 回答
123 浏览

javascript - 使用 OMetaJS 创建包含令牌值和位置的 AST

我正在尝试使用 OMetaJS 解析 DSL 并生成一个包含令牌值及其在原始流中的索引的 AST。

我知道我可以使用索引捕获规则语法 ( @<rule>) 为我提供一个包含构建标记的索引的对象,但是是否可以捕获它以及标记值?

例如对于语法:

解析“鲍勃”给出:

如果我从“标识符”中删除“@”,那么解析会给出“Bob”作为结果。我最想得到的是两者的结合:

我当然可以破解源代码,但是有更好的方法吗?

我想要同时拥有价值和位置,因为我正在尝试创建 DSL 的可视化表示,例如它允许编辑标识符名称。在这种情况下,我需要知道标识符出现在原始源中的哪个位置,以便我可以修改它。

0 投票
1 回答
308 浏览

python - 如何在 Python Parsley 中访问整个匹配的字符串?

我正在使用 OMeta 和 Python Parsley ( http://parsley.readthedocs.org/ ) 进行解析。有没有办法访问特定规则匹配的字符串?

例如,考虑以下代码:

我正在寻找一种方法来引用整个匹配以返回如下内容:

以下代码适用于此目的:

但是,我有数百条规则,我想避免包装每一条。

0 投票
1 回答
955 浏览

glob - 文件路径通配符 (glob) 的 BNF 语法定义

我正在寻找一些用 BFN 规则描述的广泛扩展的方言(比如https://github.com/vmeurisse/wildmatch + globstar **)。

任何格式或语言。OMeta 或 PEG 会很棒。

0 投票
0 回答
205 浏览

c# - OMeta 下划线和点

您好我需要修改以下OMeta PEG :

支持符号,包括下划线和点字符。Numbers中也应该支持点。

我尝试使用以下产品(取自原始Ometa#站点)修改Number规则,但在生成SExpression解析器时会出现运行时错误:

这似乎也不起作用:

在这种情况下,我能够生成解析器,但是我尝试解析类似0.25.

我还编写了这些规则以允许解析下划线(和点)丰富的符号,但它也不起作用:

我试图解析的表达式如下:

解析这个的异常总是这个:

在此处输入图像描述

没有堆栈跟踪:-(。