【问题标题】:Defining a User Defined Language on top of SQL在 SQL 之上定义用户定义的语言
【发布时间】:2015-08-07 02:43:05
【问题描述】:

好的,所以我们的基本想法是在 SQL 之上构建一种语言。我们的主要目标是预处理一个包含混合了不同内容的 SQL 的字符串,解析我们“发明”的语言,在另一端生成 SQL 并最终执行该 SQL 字符串。

这类似于 ASP/PHP 在 HTML 上所做的事情(我知道这在语义上不正确,我只是在寻找语法部分)

我们已经有了一个像魅力一样工作的解析器,但是随着查询变得越来越长,并且我们不断在“语言”中添加新功能,如果我有 Notepad++ 来正确突出我的语法,我会很高兴.

代码示例

WHERE PARENT_ID = {GETVAR|PARENT_ID**'}

这实质上是获取名为 PARENT_ID 的变量,并将其填充到由两个 ' 包围的位置。它看起来像

WHERE PARENT_ID = 'a parent'

我一直在努力解决的问题是单引号,它是不匹配的,不应该被识别为 SQL 字符串,因为它在我们的小“函数”中。如果在 { 和 } 内,如何正确告诉 notepad++ 避免使用这种单引号?

非常感谢。

【问题讨论】:

    标签: notepad++ syntax-highlighting highlighting user-defined


    【解决方案1】:

    您可以从PL-SQL 示例开始并添加您的扩展来创建用户定义的语言。它不如内部解析器强大,但它可以让您:

    1. 添加'作为新关键字,例如,
    2. * 添加到运算符,
    3. 并创建一个新的分隔符{},允许在其中使用运算符和新关键字。

    这将排除 '...' 分隔符并允许使用 ' 关键字,这正是您的意图。

    注意关键字需要分隔,' 仅当* 是运算符(因此用作分隔符)时才是关键字。此外,您可能需要写\' 而不仅仅是'

    【讨论】:

    • 首先感谢您的宝贵时间和回答。我稍后会尝试你的建议。我们的* 不是 一个运算符,只是一个分隔符,但我想欺骗语法高亮显示它并没有什么错,只是为了更好的高亮显示。将 ' 更改为 \' 是不可能的,因为我们已经运行这个语法几个月了,并且更改我们构建的每个解析器都会很麻烦(而且完全容易出错)正如我所说,我会试试你的提出建议并与结果一起发回。
    • @TIMINeutron \' 仅在 Notepad++ 定义中。您必须输入\' 才能识别单个'。不知道为什么会这样,真的。 * 部分就像你说的那样。只是欺骗 Notepad++ 将其视为分隔符并以不同方式进行绘制。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 2015-04-22
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多