由于找不到语法突出显示的指导方针,所以我决定准备简单的write-as-plain-text-and-then-highlight-everything-in-html-preview,,这对于我目前的工作范围来说已经足够了。
通过重写许多自定义元模型类,我有to_source方法,它实际上反向地重新实现了整个语法,因为反向解析还不可用。这很好,但它忽略了用户格式。
为了保留用户格式,我们只能使用可用的东西:_tx_position和_tx_position_end。通过存储自定义元模型类属性从主textX规则降到其子级,大多数情况下都是有效的,但对于原语,会失败。
# textX meta-model file
NonsenseProgram:
"begin" foo=Foo "," count=INT "end";
;
Foo:
"fancy" a=ID "separator" b=ID "finished"
;# 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让我们考虑给出的例子。由于我们有可以重写的NonsenseProgram和Foo类,所以我们可以控制它作为一个整体返回的源代码。我们可以修改NonsenseProgram生成的代码,NonsenseProgram.foo片段(通过重写Foo),通过访问它的_tx_*属性。我们不能对NonsenseProgram.count、Foo.a和Foo.b做同样的操作,因为我们有原始的string或int值。
根据原语的使用情况,我们有以下选项:
对其他选择有什么建议吗?
发布于 2019-01-17 08:38:54
你是正确的。没有关于基本类型的位置的信息。现在看来,您已经考虑到了可用的选项。
一个容易实现的选项是将所有属性的簿记直接添加到textX中,作为每个创建的对象上的特殊结构(例如,属性名称键)。实现起来应该很简单,这样如果您愿意的话,可以在问题跟踪器中注册一个特性请求。
过去有一些工作来支持基于textX的语言的完整语言服务。这样做的目的是为使用textX指定的任何语言获取所有您期望的代码编辑器/IDE特性。这项工作停顿了一段时间,但最近又重新进行了全面重写。它应该得到textX团队的正式支持。您可以跟踪进度这里。尽管该项目目前没有提到语法突出显示,但它在我们的议程上。
https://stackoverflow.com/questions/54216375
复制相似问题