gpt4 book ai didi

java - 如何构建我的 XText 终端? WORDS/SL_STRING/ML_STRING

转载 作者:行者123 更新时间:2023-12-01 11:24:51 25 4
gpt4 key购买 nike

在我的 XText DSL 中,我希望能够使用三种不同类型的文本终端。它们都用于在 UML 图中绘制的箭头顶部添加注释:

终端WORD:

Actor -> Actor :WORD

终端SL_STRINGS:

Actor -> Actor:单行上的一系列单词

终端ML_STRINGS:

    Actor -> Actor: A series of words on 
multiple
lines

我最初的方法是使用 org.eclipse.xtext.common.Terminals 中的 ID 终端作为我的 WORD 终端,并且那么只需将 SL_STRINGS 设为 (WORD)*,将 ML_STRINGS 设为 (NEWLINE? WORD)*,但是这个规则之间的模糊性造成了很多问题。

我该如何以良好的方式构建这个?

<小时/>

有关该项目的更多信息。 (由于这是第一次使用 XText,请耐心等待):

我正在尝试实现一个与 PlantUML 的 Eclipse 插件一起使用的 DSL http://plantuml.sourceforge.net/sequence.html主要用于语法检查和着色。目前我的语法是这样的:

Model:
(diagrams+=Diagram)*;

Diagram:
'@startuml' NEWLINE (instructions+=(Instruction))* '@enduml' NEWLINE*
;

一条指令可以包含很多内容:

Instruction: 
((name1=ID SEQUENCE name2=ID (':' ID)?)
| Definition (Color)?
| AutoNumber
| Title
| Legend
| Newpage
| AltElse
| GroupingMessages
| Note
| Divider
| Reference
| Delay
| Space
| Hidefootbox
| Lifeline
| ParticipantCreation
| Box)? NEWLINE
;

需要不同类型文本终端的规则示例:

Group:
'group' TEXT
;

Reference:
'ref over' ID (',' ID)* ((':' SL_TEXT)|((ML_TEXT) NEWLINE 'end ref'))
;

对于 Group,文本只能占一行,而对于 Reference,如果规则调用后面没有“:”,则文本可以占两行。

目前我的终端如下所示:

terminal NEWLINE    : ('\r'? '\n');

// Multiline comment begins with /', and ends with '/
terminal ML_COMMENT : '/\'' -> '\'/';

// Singleline comment begins with ', and continues until end of line.
terminal SL_COMMENT : '\'' !('\n'|'\r')* ('\r'? '\n')?;

// INT is a sequence of numbers 0-9.
terminal INT returns ecore::EInt: ('0'..'9')+;

terminal WS : (' '|'\t')+;

terminal ANY_OTHER: .;

我想在此基础上添加三个新的终端来处理文本。

最佳答案

您应该实现数据类型规则才能实现所需的行为。Sebastian 就此主题撰写了一篇出色的博客文章,可以在此处找到:http://zarnekow.blogspot.de/2012/11/xtext-corner-6-data-types-terminals-why.html

这是一个最小的语法示例:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
greetings+=Greeting*;

Greeting:
'Example' ':' comment=Comment;

Comment:
(ID ('\r'? '\n')?)+
;

这将允许你写这样的东西:

Example: A series of words

Example: A series of words on
multiple lines

然后您可能想要实现您自己的 value converter为了微调到字符串的转换。

如果有帮助请告诉我!

关于java - 如何构建我的 XText 终端? WORDS/SL_STRING/ML_STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com