在Rascal中使用“父”标签注释ADT /节点树(Annotating a ADT/Node tree with “parent” labels in Rascal)
我想创建一个树(使用
Node
或ADT
),其中每个节点都有一个指向其父节点的注释。 下面是一个简单链表数据结构的示例:import util::Math; import IO; import Node; anno LinkedList LinkedList@parent; anno int LinkedList@something; data LinkedList = item(int val, LinkedList next) | last(int val) ; public LinkedList linkedList = item(5, item(4, item(3, item(2, last(1)[@something=99] )[@something=99] )[@something=99] )[@something=99] )[@something=99]; public LinkedList addParentAnnotations(LinkedList n) { return top-down visit (n) { case LinkedList x: { /* go through all children whose type is LinkedList */ for (LinkedList cx <- getChildren(x), LinkedList ll := cx) { /* setting the annotation like this doesn't seem to work */ cx@parent = x; // DOESN'T WORK EITHER: setAnnotation(cx, getAnnotations(cx) + ("parent": x)); } } } }
执行
addParentAnnotations(linkedList)
产生以下结果:rascal>addParentAnnotations(linkedList); LinkedList: item( 5, item( 4, item( 3, item( 2, last(1)[ @something=99 ])[ @something=99 ])[ @something=99 ])[ @something=99 ])[ @something=99 ]
I want to create a tree (using a
Node
orADT
) in which every node has an annotation pointing back to its parent. Below is an example with a simple linked list data structure:import util::Math; import IO; import Node; anno LinkedList LinkedList@parent; anno int LinkedList@something; data LinkedList = item(int val, LinkedList next) | last(int val) ; public LinkedList linkedList = item(5, item(4, item(3, item(2, last(1)[@something=99] )[@something=99] )[@something=99] )[@something=99] )[@something=99]; public LinkedList addParentAnnotations(LinkedList n) { return top-down visit (n) { case LinkedList x: { /* go through all children whose type is LinkedList */ for (LinkedList cx <- getChildren(x), LinkedList ll := cx) { /* setting the annotation like this doesn't seem to work */ cx@parent = x; // DOESN'T WORK EITHER: setAnnotation(cx, getAnnotations(cx) + ("parent": x)); } } } }
Executing
addParentAnnotations(linkedList)
yields the following result:rascal>addParentAnnotations(linkedList); LinkedList: item( 5, item( 4, item( 3, item( 2, last(1)[ @something=99 ])[ @something=99 ])[ @something=99 ])[ @something=99 ])[ @something=99 ]
原文:https://stackoverflow.com/questions/19028623
更新时间:2023-05-01 13:05
最满意答案
\w
包括数字; 它相当于[A-Za-z0-9_]
。 所以无论哪种方式,你都允许他们。
\w
includes digits; it's equivalent to[A-Za-z0-9_]
. So either way you're allowing them.
相关问答
更多-
.bind()方法将返回一个函数,其中包含您作为第一个参数绑定的值的任何值。 既然你正在从.test()调用.bind() ,你会得到.test()方法,并绑定到new RegExp(key, 'g') 。 /./在这里不重要。 这只是获取RegExp.prototype.test方法的RegExp.prototype.test方法。 其结果是,你将有效地做到: var regexp = new RegExp(key, 'g'); filterArray.filter(function(val) { ...
-
你不能使用%a 。 它只匹配一个八位字节(与语言环境相关,但通常只有一个字节,用于编码ASCII或Latin-1中的字母。) 要匹配UTF-8编码的字母,您需要将它们分解为字节范围,如此处的示例所示。 例如,UTF-8编码的平假名的一些模式可能包括: (\227\129[\129-\191]) (\227\130[\128-\160]) 匹配所有 unicode字母(需要包含数百个子范围)的模式的完整列表将是不实用的。 You cannot use %a for this. It only matches ...
-
你可以使用下面的代码来解决这个问题: #!/usr/bin/python # -*- coding: utf-8 -*- import re str = u'[DMSM-8433] 加護亜依 Kago Ai – 加護亜依 vs. FRIDAY' regex = u'[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]+ (?=[A-Za-z ]+–)' p = re.compile(regex, re ...
-
您的代码在v5.14上传递给我。 /u不会按照您的想法执行,因为您在模式中只有ASCII。 你需要v5.16,并且出现在v5.14中。 除非你试图使用一些v5.16增强功能,否则没有大呐喊。 正如许多人所指出的那样,数字和数字之间存在语义差异。 我想你只想匹配一组数字。 问题是UCS不会将要匹配的字符标记为数字。 因此,您创建了一个非常广泛的角色类来做到这一点。 我认为你坚持这一点。 你可能不想继续这样做。 您可以在子例程中隐藏它,但您也可以定义其他属性。 您创建一个特别命名的子例程,该子例程返回一个字符串 ...
-
加。 到XRegExp Unicode脚本 : 平假名( \p{Hiragana} )char regex: [\u3041-\u3096\u309D-\u309F]|\uD82C\uDC01|\uD83C\uDE00 片假名( \p{Katakana} )char regex: [\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D]|\uD82C\uDC00 汉字( \p{H ...
-
正则表达式过滤日语(Regex filtering Japanese)[2022-03-08]
\w包括数字; 它相当于[A-Za-z0-9_] 。 所以无论哪种方式,你都允许他们。 \w includes digits; it's equivalent to [A-Za-z0-9_]. So either way you're allowing them. -
注意:我不熟悉日文书写系统。 查看该函数, iconv调用将显示删除所有日文字符。 而不是使用iconv来音译,可能更容易创建一个执行它的函数: function _toSlugTransliterate($string) { // Lowercase equivalents found at: // https://github.com/kohana/core/blob/3.3/master/utf8/transliterate_to_ascii.php $lower = [ ...
-
您将需要使用Unicode正则表达式。 请检查以前的SO线程,其中讨论了各种unicode匹配机制。 You will need to use Unicode regular expressions. Please check this previous SO thread in which various unicode matching mechanisms are discussed.
-
可悲的是,Javascript是一个“仅限ASCII”的正则表达式。 不支持Unicode(我的意思是Unicode非ASCII字符不是“分为类”。所以\d例如只有0-9)。 如果您需要Javascript中的高级正则表达式(Unicode正则表达式),可以尝试http://xregexp.com/ 我们甚至不会深入研究代理对的问题。 Javascript中的字符是UTF-16点,因此它并不总是“完整”的Unicode字符。 幸运的是,日语完全应该在BMP中(但请注意汉族统一在平面2中,所以每个字符都是2x ...
-
使用正则表达式的html / javascript? 也许你没有看到Bobice先生这个史诗般的答案 。 简而言之,如果你使用正则表达式,那么你有两个问题 。 事实上,HTML Purifier之所以如此慢,是因为它使用了数百次调用preg_match()和preg_repalce()来清理消息。 你绝不能重新发明风团,毫无疑问会不那么安全。 真正的问题是htmlspeicalchars($var,ENT_QUOTES); vs HTML Purifier。 HTML Purifer不仅速度慢,而且已被黑客 ...