首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在textX中创建语法突出显示的方法?

在textX中创建语法突出显示的方法?
EN

Stack Overflow用户
提问于 2019-01-16 11:44:43
回答 1查看 197关注 0票数 1

由于找不到语法突出显示的指导方针,所以我决定准备简单的write-as-plain-text-and-then-highlight-everything-in-html-preview,,这对于我目前的工作范围来说已经足够了。

通过重写许多自定义元模型类,我有to_source方法,它实际上反向地重新实现了整个语法,因为反向解析还不可用。这很好,但它忽略了用户格式。

为了保留用户格式,我们只能使用可用的东西:_tx_position_tx_position_end。通过存储自定义元模型类属性从主textX规则降到其子级,大多数情况下都是有效的,但对于原语,会失败

代码语言:javascript
复制
# textX meta-model file
NonsenseProgram:
    "begin" foo=Foo "," count=INT "end";
;

Foo:
    "fancy" a=ID "separator" b=ID "finished"
;
代码语言:javascript
复制
# textX custom meta-model classes
class NonsenseProgram():
    def __init__(foo, count):
        self.foo = foo
        self.count = count

    def to_source(self):
        pass  # some recursive magic that use _tx_position and _tx_position_end

class Foo():
    def __init__(parent, a, b):
        self.parent = parent
        self.a = a
        self.b = b

    def to_source(self):
        pass  # some recursive magic that use _tx_position and _tx_position_end

让我们考虑给出的例子。由于我们有可以重写的NonsenseProgramFoo类,所以我们可以控制它作为一个整体返回的源代码。我们可以修改NonsenseProgram生成的代码,NonsenseProgram.foo片段(通过重写Foo),通过访问它的_tx_*属性。我们不能NonsenseProgram.countFoo.aFoo.b做同样的操作,因为我们有原始的stringint值。

根据原语的使用情况,我们有以下选项:

  • 用只包含该原语而不包含其他任何内容的规则包装每个原语。 优点:它现在起作用了! 缺点:产生大量嵌套值,我们的语法工具链需要处理这些值。这实际上只是为了漂亮才扰乱语法..。
  • 忽略用户的语法,只使用我们的反向解析规则。 优点:它也很管用! 缺点:几乎每个语法元素都需要重新实现语法。这是强制代码格式的每一个突出显示尝试。
  • 使用一些突出显示的外部规则。 优点:这样会管用的..。 缺点:同样,语法的重新实现。
  • 使用语言服务器。 优点:从长远来看,这是最好的选择。 缺点:没有任何深度文档的只提过一次

对其他选择有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-17 08:38:54

你是正确的。没有关于基本类型的位置的信息。现在看来,您已经考虑到了可用的选项。

一个容易实现的选项是将所有属性的簿记直接添加到textX中,作为每个创建的对象上的特殊结构(例如,属性名称键)。实现起来应该很简单,这样如果您愿意的话,可以在问题跟踪器中注册一个特性请求。

过去有一些工作来支持基于textX的语言的完整语言服务。这样做的目的是为使用textX指定的任何语言获取所有您期望的代码编辑器/IDE特性。这项工作停顿了一段时间,但最近又重新进行了全面重写。它应该得到textX团队的正式支持。您可以跟踪进度这里。尽管该项目目前没有提到语法突出显示,但它在我们的议程上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54216375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档