问题标签 [mini-language]

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 投票
5 回答
359 浏览

database - 用于读取数据库模式的外部库或迷你语言?

我正在考虑为我的妻子编写一个简单的数据库应用程序,但我对良好的编程实践很感兴趣,并且希望有一个人类可读的源代码来存储数据库模式。

只是,我不知道任何用于这项工作的工具,而且我不敢相信它们不存在——可能我只是不知道该问谷歌什么,但我没有找到它们。

那么,有哪些库或其他工具支持从纯文本文件中读取数据库模式。


对于 invenetix 的问题:我希望在构建时生成数据库创建代码,或者在版本中包含模式描述,并在运行时从描述中构建数据库。Draemon 的建议很好,但如果我能提供帮助,我不想被锁定在预先确定的 RDBMS 中。

或许我应该说我以前在编程项目中使用过数据库,但从未负责创建代码。

可能我在这一点上过度设计了这个问题。

0 投票
6 回答
921 浏览

parsing - 可组合语法

有很多编程语言支持包含迷你语言。PHP 嵌入在 HTML 中。XML 可以嵌入到 JavaScript 中。Linq 可以嵌入到 C# 中。正则表达式可以嵌入到 Perl 中。

想一想,大多数编程语言都可以建模为不同的迷你语言。例如,Java 可以分解为至少四种不同的迷你语言:

  • 类型声明语言(包指令、导入指令、类声明)
  • 成员声明语言(访问修饰符、方法声明、成员变量)
  • 语句语言(控制流、顺序执行)
  • 一种表达式语言(文字、赋值、比较、算术)

能够将这四种概念语言实现为四种不同的语法肯定会减少我通常在复杂的解析器和编译器实现中看到的许多意大利面。

我之前已经为各种不同类型的语言实现了解析器(使用 ANTLR、JavaCC 和自定义递归下降解析器),当语言变得非常庞大和复杂时,您通常会得到一种 huuuuuuge 语法,并且解析器实现得到真的很丑真的很快。

理想情况下,当为其中一种语言编写解析器时,最好将其实现为可组合解析器的集合,在它们之间来回传递控制。

棘手的是,包含语言(例如,Perl)通常会为包含的语言(例如,正则表达式)定义自己的终点哨兵。这是一个很好的例子:

在这段代码中,主要的 perl 代码定义了一个非标准的终点“|” 对于正则表达式。实现与 perl 解析器完全不同的正则表达式解析器将非常困难,因为正则表达式解析器不知道如何在不咨询父解析器的情况下找到表达式终点。

或者,假设我有一种语言允许包含 Linq 表达式,但不是以分号结尾(如 C# 那样),我想强制 Linq 表达式出现在方括号内:

如果我在父语言语法中定义了 Linq 语法,我可以轻松地为“LinqExpression”编写一个明确的产生式,使用语法前瞻来查找括号包围。但是我的父语法必须吸收整个 Linq 规范。这是一个拖累。另一方面,一个单独的子 Linq 解析器将很难确定在哪里停止,因为它需要为外来标记类型实现前瞻。

这几乎可以排除使用单独的词法分析/解析阶段,因为 Linq 解析器将定义一组与父解析器完全不同的标记化规则。如果您一次扫描一个标记,您怎么知道何时将控制权交还给母语的词法分析器?

你们有什么感想?当今可用于实现不同的、解耦的和可组合的语言语法以将迷你语言包含在更大的父语言中的最佳技术是什么?

0 投票
1 回答
3192 浏览

wpf - 将几何/路径转换为 ​​Minilanguage 字符串?

追踪如何以编程方式将路径字符串转换为 WPF 中的路径对象并不难,但是是否有内置函数可以将几何或路径转换回迷你语言中的字符串?

0 投票
4 回答
13950 浏览

python - 使用 Python 的 Format Specification Mini-Language 对齐浮点数

我读到我可以使用 Python 的Format Specification Mini-Language来更好地控制字符串的显示方式。但是,我很难弄清楚如何使用它来显示在小数点上对齐的浮点数。

例如,假设我有以下三个列表:

我想遍历这三个列表并打印

到目前为止,我已经尝试过:

打印:

这几乎是正确的,但它不会围绕小数点对齐浮点数。如何使用 Python 的Format Specification Mini-Language以我需要的方式进行操作?

0 投票
2 回答
3037 浏览

python - Python 浮点字符串格式无法正常工作

我很确定我做对了,但没有从 Python 2.7.3 字符串格式化迷你语言中得到我期望的结果。我正在尝试将浮点数的输出格式化为 3 个整数值和不同数量的十进制值。除整数值外,一切正常。

就其本身而言,以下代码可以让我获得 3 个整数值......

和花车工作...

但是,将两者结合起来似乎无法正常工作。小数精度有效,但整数精度不...

如果我尝试以下任何一种格式,情况也是如此......

如果您对我为可变/动态小数精度所做的事情感到好奇,关键是要保持所有值的长度相同,但不同的值集可能不具有相同的精度。所以我取最长精度值或 10 中较小的一个,并强制其他人像这样匹配..

同样,这一切都完美无缺,除了当我将整数值与浮点精度结合时,它永远不会返回 3 个精度位置。因此,我为确保输出具有相同格式长度的值所做的所有努力都是徒劳的。最终,输出应该类似于...

相反,它看起来像这样......

换句话说,丑陋。:-|

至少,我会接受以下输出......

有什么想法我在这里做错了吗?非常感谢您的帮助!

问候,

-RMW混沌

0 投票
2 回答
419 浏览

haskell - 用 haskell 编写迷你语言,“while”语句和块的麻烦{}

编辑:问题部分解决,跳到底部进行更新。

我正在使用 haskell 编写一种小型语言,并且取得了很大进展,但是在实现使用块的语句时遇到了麻烦,例如“{ ... }”。我已经在我的解析器文件中实现了对 If 语句的支持:

在语法文件中:

while 语句有问题,我不明白是什么。逻辑似乎是正确的,但是当我运行代码时,出现以下错误:

正在读取的文件如下所示:

我试图理解错误报告,但我没有尝试解决问题。

0 投票
1 回答
251 浏览

haskell - 总结用 Haskell 编写的迷你语言,“while”语句的问题

我之前问了一个类似的问题,并解决了最初的问题。我遇到了另一个错误隐藏的附加问题。我能够使诸如“if”语句之类的语句正常工作,但不能使“while”语句正常工作。当评估“stmt”时,必须更新环境。这适用于我的“if”语句,如下所示:

评估看起来像这样:

正在解析的文件如下所示:

我尝试让 while 语句工作是这样的:

但这会在“)”上产生解析错误。正在解析的文件中的 while 语句的预期格式:

我试图了解如何根据这种预期格式返回正确的环境。如果 Haskell 中的 while 语句已经有类似的结构,那就很简单了,但我知道没有这样的结构存在。

0 投票
1 回答
1163 浏览

haskell - Haskell 迷你语言

我正在尝试为语言 E 定义一个评估器,坦率地说,我完全不知道如何修复我在定义 eval 类型时遇到的所有错误。我现在花了几个小时阅读解释器,单子并试图找到类似的东西给我一个基础,但我什么也没找到。这是作业,所以自然没有直接的答案。我现在的大问题是没有 Num E 或 Integral E 的实例声明,当我尝试使用 fromInt 和 fromNum 来解决这个问题时,我遇到了额外的错误。我还尝试将定义更改为各种不同的方式,主要问题是 Int 与 E 的类型不匹配。我觉得我错过了一些非常基本的东西,但我没有 根本无法缩小范围。如果我对任何特定点不清楚,我很乐意回答任何其他问题。如果有任何来源可以提供很好的附加信息,我将非常感谢链接。

0 投票
1 回答
273 浏览

python - 从浮点数中删除小数点的 Python 迷你语言格式规范

我正在使用 Python 的格式迷你语言来引用字典。对于字典中的一个浮点数,我想打印它不带小数点。

例如:

回报:

但是,我想格式化 b_float (以删除 '0.'),以便打印出返回:

这在迷你语言格式规范的范围内是否可能?

我知道这可以通过(a)传入单个项目(并在参数中编辑它们)而不是字典本身或通过(b)对输出字符串进行后处理来完成,但我想知道 Python 的 mini-语言足够复杂,可以仅将这个问题简化为迷你语言的格式规范。

(对于那些对此动机感兴趣的人,我正在尝试从卫星参数字典中打印出 TLE。如果您有兴趣,Google/Wikipedia 可能会告诉您更多信息,但每个字符的位置很重要,并且它假定某些项目(如偏心率)的小数位。)

0 投票
1 回答
24 浏览

python - 如何在 Python 格式字符串迷你语言中给出多个参数(宽度、叹息、分组)?

我从 Python 文档中读取了格式字符串迷你语言并尝试这样做:

其他任何东西都会给ValueError: Invalid format specifier我。

为什么不能将<20参数与+参数一起使用?

实际上,我发现这种嵌套形式有效,但不是最理想的。还有其他方法吗?