问题标签 [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.
oslo - Oslo 的 Intellipad:如何设置 3 列 MGrammarMode?
我一直在将 Oslo 用于 MSchema。效果很好。我可以为数据库设计编写一个 M Schema,它生成 T-SQL 以使用 PK、FK、检查完整性等构建整个数据库。我已经设置了一个 .bat 文件来将 .m 编译成 .mx 然后加载它进入数据库,然后在我的项目中运行 SqlMetal,并在 30 秒内继续我的更改。我喜欢它。
好的,现在我要进入 mGrammar。我不太确定如何将它整合到我的应用程序中,但我会弄清楚的。我首先需要的是设置 Intellipad 给我输入/语法/输出三联。我难住了。我想不出任何方法来设置它。是的,我可能可以使用 song.mg 项目并重命名它,但这并不能让我深入了解它是如何工作的。有任何想法吗?
oslo - 转移减少和减少减少冲突
我很难解决这个问题,需要一些帮助来理解减少和减少冲突。我有一个语法,我似乎无法理解它为什么会出现问题。我可以附上语法,但我想了解它是如何工作的。
第一个问题,Mgrammer 创建什么类型的解析器?据我了解, shift reduce 和 reduce reduce 冲突取决于解析器的类型。
第二个问题,什么表示减少减少冲突,什么表示转移减少冲突?
我知道词法分析和形式语法的基础知识,但是自从我从事语言设计工作以来已经有一段时间了,所以这里的任何帮助都非常合适。
更新:
我正在使用一种重要的空白语言,我想知道在 MGrammar 中这样做的可能性,我需要先看一下才能解决歧义吗?
parsing - Mgrammar 语法和变量声明
我敢肯定,我会被告知以另一种方式进行,但出于特定原因,必须以这种方式进行。如果没有,我就不会被卡住:-P
我正在使用的脚本语言必须接受这样定义的变量:
这是一个要求。我之前写了一个小语法,让我这样定义它们
但要求发生了变化。我的语法之前的样子是这样的
sType 的值是 System.String、Int32 等,然后是变量名,然后是表达式。然后我将其投影到 DeclareVar 节点并为其提供所需的参数,在代码中我将其解析为 XML,然后让 MGrammar 解析 XML 并很好地遍历我的 AST。由于他们希望能够在不声明类型的情况下执行变量,所以我有点坚持现在要做什么,即如何将没有声明类型的变量存储到适当的类中。任何帮助将不胜感激,希望这一切都有意义。
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# 应用程序中解析它时忽略此消息,那么我猜这也可以。
oslo - 有没有更好的方法在 MGrammar 中定义小数?
我正在使用 Microsoft 的新 M 语法中的 DSL,它需要允许十进制值。我将小数定义为
这似乎有效,但有更好的方法吗?只是觉得我错过了一些东西。
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 语句的解析或有任何建议?
mgrammar - 是否可以在 MGrammar 中解析多行 c 样式注释?
我一直在研究 May09 Oslo 位,尝试对一些源代码进行标记。不过,我似乎无法弄清楚如何正确处理多行 C 风格的注释。例如:/*comment*/
一些让我无法理解的案例:
或者
我可以完成一项或另一项工作,但不能两者兼而有之。语法是:
注释掉的标记是我想我想做的,但是不允许使用递归标记。MGrammar 本身具有“损坏”的多行注释(它无法处理/***/
)这一事实让我相信这是不可能的。
还有人知道吗?
oslo - 用 M 编写解析器,消费而不规则
我正在编写一个 HTML 解析器以供自己消遣,我想尝试 M。
我将这项工作基于 HTML 4.01 标准,并在其中说
尽管 STYLE 和 SCRIPT 元素使用 CDATA 作为其数据模型,但对于这些元素,用户代理必须以不同方式处理 CDATA。标记和实体必须被视为原始文本并按原样传递给应用程序。字符序列“</”(结束标记打开分隔符)的第一次出现被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。
我想了一会儿,真的我想做的是这样的
我发现我自己发现我想要执行某种匹配的标记化规则,直到我到达一个开放的尖括号 < 后跟一个正斜杠 /。
如果转义序列是单个字符,这将不是问题,因为那时我可以写这个。
这会起作用,不确定我是否以正确的方式解决这个问题,但问题与我在另一种语言中嵌入了一种语言有关,但在这种情况下我不关心脚本语言,所以我只是想要跳过一个头。
parsing - 使用 MGrammar 解析行注释块
如何使用 MGrammar 解析行注释块?
我想解析行注释块。每个旁边的行注释应该在 MGraph 输出中分组。
我无法将行注释块组合在一起。我当前的语法使用 "\r\n\r\n" 来终止一个块,但这在所有情况下都不起作用,例如在文件末尾或当我引入其他语法时。
示例输入可能如下所示:
我现在的语法是这样的:
c# - 在 C# 中解析特定数据
我有以特定文本格式存储的数据:
我需要解析它并从中获取 C# 类型的数据结构。
用 C# 编写解析器并不简单(非常多的正则表达式和硬代码)。
我从 Microsoft 听说过一些有关 Oslo\Mgrammar 的信息。此工具是否为我的特定数据生成 C# 解析器代码?
输出我只需要解析器的 C# 代码,而不需要参考其他库。