图形标记可以用作不需要单引号的Prolog运算符。
ISO / IEC 13211-1:1995,6.4.2“ Syntax.Tokens.Names”的翻译是:
graphic_token --> kleene_plus(graphic_token_char).
graphic_token_char --> member("#$&*+-./:<=>?@^~\\").
% some auxiliary code
kleene_plus(NT) --> NT, kleene_star(NT).
kleene_star(NT) --> "" | kleene_plus(NT).
member(Xs) --> [X], { member(X,Xs) }.
第6.4.1节“ Syntax.Tokens.Layout文本”添加了以下约束:
图形标记不得以字符序列
comment open
(即“/*
”)开头。
强制实施DCG中的限制没什么...
graphic_token --> graphic_token_char. % 1 char graphic_token --> % 2+ chars [C1,C2], { phrase((graphic_token_char,graphic_token_char), [C1,C2]) }, { dif([C1,C2], "/*") }, kleene_star(graphic_token_char).
...但是很丑! 如何再次使其漂亮(并保持双向)?
答案 0 :(得分:3)
我不确定这是否更漂亮,但也许是这样的:
graphic_token --> kleene_plus_member("#$&*+-.:<=>?@^~\\",0'/).
graphic_token --> "/", kleene_star_member("#$&+-./:<=>?@^~\\", 0'*).
kleene_plus_member(Xs, Code) --> member(Xs), kleene_star(member([Code|Xs])).
kleene_star_member(Xs, Code) --> "" | member(Xs), kleene_star(member([Code|Xs])).
graphic_token的第一子句解析不以/
开头的图形令牌,第二子句以不以Digikam 5.6.0
开头的图形令牌进行解析。