问题标签 [mgrammar]

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 投票
3 回答
693 浏览

oslo - Oslo 的 Intellipad:如何设置 3 列 MGrammarMode?

我一直在将 Oslo 用于 MSchema。效果很好。我可以为数据库设计编写一个 M Schema,它生成 T-SQL 以使用 PK、FK、检查完整性等构建整个数据库。我已经设置了一个 .bat 文件来将 .m 编译成 .mx 然后加载它进入数据库,然后在我的项目中运行 SqlMetal,并在 30 秒内继续我的更改。我喜欢它。

好的,现在我要进入 mGrammar。我不太确定如何将它整合到我的应用程序中,但我会弄清楚的。我首先需要的是设置 Intellipad 给我输入/语法/输出三联。我难住了。我想不出任何方法来设置它。是的,我可能可以使用 song.mg 项目并重命名它,但这并不能让我深入了解它是如何工作的。有任何想法吗?

0 投票
1 回答
4687 浏览

oslo - 转移减少和减少减少冲突

我很难解决这个问题,需要一些帮助来理解减少和减少冲突。我有一个语法,我似乎无法理解它为什么会出现问题。我可以附上语法,但我想了解它是如何工作的。

第一个问题,Mgrammer 创建什么类型的解析器?据我了解, shift reduce 和 reduce reduce 冲突取决于解析器的类型。

第二个问题,什么表示减少减少冲突,什么表示转移减少冲突?

我知道词法分析和形式语法的基础知识,但是自从我从事语言设计工作以来已经有一段时间了,所以这里的任何帮助都非常合适。

更新:

我正在使用一种重要的空白语言,我想知道在 MGrammar 中这样做的可能性,我需要先看一下才能解决歧义吗?

0 投票
2 回答
450 浏览

parsing - Mgrammar 语法和变量声明

我敢肯定,我会被告知以另一种方式进行,但出于特定原因,必须以这种方式进行。如果没有,我就不会被卡住:-P

我正在使用的脚本语言必须接受这样定义的变量:

这是一个要求。我之前写了一个小语法,让我这样定义它们

但要求发生了变化。我的语法之前的样子是这样的

sType 的值是 System.String、Int32 等,然后是变量名,然后是表达式。然后我将其投影到 DeclareVar 节点并为其提供所需的参数,在代码中我将其解析为 XML,然后让 MGrammar 解析 XML 并很好地遍历我的 AST。由于他们希望能够在不声明类型的情况下执行变量,所以我有点坚持现在要做什么,即如何将没有声明类型的变量存储到适当的类中。任何帮助将不胜感激,希望这一切都有意义。

0 投票
0 回答
102 浏览

grammar - MGrammar 和不止一种有效的解释

我认为我可能遇到的是悬空的 else 问题,但我不确定。我负责编写的语言需要支持多行 if 语句以及单行 ie

用我的语言对应

我还需要添加对 else-if 和 else's 的支持,两者都使用与上述相同的语法以及 begin's 和 end's。我花了一段时间试图让它工作并且我已经接近了,但是我现在使用的语法我得到了“这个输入有多个有效的解释......”错误。这是我正在使用的 MGrammar 代码:

这可能是第 10 个版本,因为我尝试了各种方法来使 if/else if/else 结构正常工作。

基本上,我的 Main 得到一个 StatementList,sIf 就是其中之一。sIf 尝试查找多行或单行 if 语句,后跟可选的 sElseIf(您不必有 else)。

我认为问题在于正则表达式编译器可能将 else if 视为 sElse 后跟 sIf 语句,而不是 sElseIf 语句。在预览模式下,它实际上完全按照我想要的方式绘制了树,所以如果有办法在我的 C# 应用程序中解析它时忽略此消息,那么我猜这也可以。

0 投票
1 回答
105 浏览

oslo - 有没有更好的方法在 MGrammar 中定义小数?

我正在使用 Microsoft 的新 M 语法中的 DSL,它需要允许十进制值。我将小数定义为

这似乎有效,但有更好的方法吗?只是觉得我错过了一些东西。

0 投票
1 回答
388 浏览

oslo - 用于解析 IF 语句的 MGrammar

我正在建立一个 MGrammar 规范来解析一些伪代码,以寻找特定的信息位。除了 1 个关键元素外,我的大部分规范都在工作。

伪代码支持 if-then-else 语法,我一直无法找到令人满意的解析方式。确切的构造是...

IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF

... Else 和 Elseif 是可选的。

到目前为止我所拥有的是:`syntax Statement = r:ReturnClause => r |
i:IfClause => i |
ei:ElseifClause => ei |
e:ElseClause => e |
结束:结束子句 => 结束 |
v:表达式 => v ;

语法 IfClause = If name:Identifier operator:Operator Then statement:Statement => If[name, operator, Then[statement]];
语法 ElseifClause = Elseif name:Identifier operator:Operator Then statement:Statement => ElseIf[name, operator, Then[statement]];
语法 ElseClause = Else statement:Statement => Else[statement];
语法 EndClause = Endif; `

但是,'Then' 和 'Else' 之后的语句不够贪心,只捕获解析树中的第一条语句。

有没有人尝试使用 MGrammar 实现 If 语句的解析或有任何建议?

0 投票
1 回答
192 浏览

mgrammar - 是否可以在 MGrammar 中解析多行 c 样式注释?

我一直在研究 May09 Oslo 位,尝试对一些源代码进行标记。不过,我似乎无法弄清楚如何正确处理多行 C 风格的注释。例如:/*comment*/

一些让我无法理解的案例:

或者

我可以完成一项或另一项工作,但不能两者兼而有之。语法是:

注释掉的标记是我想我想做的,但是不允许使用递归标记。MGrammar 本身具有“损坏”的多行注释(它无法处理/***/)这一事实让我相信这是不可能的。

还有人知道吗?

0 投票
1 回答
41 浏览

oslo - 用 M 编写解析器,消费而不规则

我正在编写一个 HTML 解析器以供自己消遣,我想尝试 M。

我将这项工作基于 HTML 4.01 标准,并在其中说

尽管 STYLE 和 SCRIPT 元素使用 CDATA 作为其数据模型,但对于这些元素,用户代理必须以不同方式处理 CDATA。标记和实体必须被视为原始文本并按原样传递给应用程序。字符序列“</”(结束标记打开分隔符)的第一次出现被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。

我想了一会儿,真的我想做的是这样的

我发现我自己发现我想要执行某种匹配的标记化规则,直到我到达一个开放的尖括号 < 后跟一个正斜杠 /。

如果转义序列是单个字符,这将不是问题,因为那时我可以写这个。

这会起作用,不确定我是否以正确的方式解决这个问题,但问题与我在另一种语言中嵌入了一种语言有关,但在这种情况下我不关心脚本语言,所以我只是想要跳过一个头。

0 投票
1 回答
156 浏览

parsing - 使用 MGrammar 解析行注释块

如何使用 MGrammar 解析行注释块?

我想解析行注释块。每个旁边的行注释应该在 MGraph 输出中分组。

我无法将行注释块组合在一起。我当前的语法使用 "\r\n\r\n" 来终止一个块,但这在所有情况下都不起作用,例如在文件末尾或当我引入其他语法时。

示例输入可能如下所示:

我现在的语法是这样的:

0 投票
3 回答
339 浏览

c# - 在 C# 中解析特定数据

我有以特定文本格式存储的数据:

我需要解析它并从中获取 C# 类型的数据结构。

用 C# 编写解析器并不简单(非常多的正则表达式和硬代码)。

我从 Microsoft 听说过一些有关 Oslo\Mgrammar 的信息。此工具是否为我的特定数据生成 C# 解析器代码?

输出我只需要解析器的 C# 代码,而不需要参考其他库。