Prolog 向DCG添加解析约束

Prolog 向DCG添加解析约束,prolog,dcg,Prolog,Dcg,图形标记可以用作不需要单引号的序言操作符 ISO/IEC 13211-1:1995,6.4.2“语法.标记.名称”的翻译为: 。。。但是很难看! 我如何使它再漂亮一点(并保持双向)?我不确定这是否更漂亮,但可能是这样的: graphic_token --> kleene_plus_member("#$&*+-.:<=>?@^~\\",0'/). graphic_token --> "/", kleene_star_member("#$&+-./:<=

图形标记可以用作不需要单引号的序言操作符

ISO/IEC 13211-1:1995,6.4.2“语法.标记.名称”的翻译为:

。。。但是很难看!
我如何使它再漂亮一点(并保持双向)?

我不确定这是否更漂亮,但可能是这样的:

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-->kleene_plus_成员(“#$&*+-.:?@^~\\”,0'/)。
graphic_token-->“/”,kleene_star_成员(“$&+-./:?@^~\\”,0'*)。
kleene_plus_成员(Xs,代码)-->成员(Xs),kleene_星(成员([Code|Xs])。
kleene|u star|成员(Xs,代码)-->“成员(Xs)”,kleene|u star(成员([代码| Xs]))。

graphic_token的第一个子句解析一个不以
/
开头的图形标记,第二个子句解析以它开头的图形标记。

事实上,当我使用
ocamlex
编写Prolog标记器时,我也有同样的想法。有点让我觉得我们的工具正在把他们的工作推回给我们;)丑陋?混合的想法/*…*/注释和图形标记很难看。@false。确实如此。就我个人而言,我不希望图形标记的内部或末尾没有
/*
*/
,即使它们是合法的。 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).
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])).