我目前正在尝试设置一个小程序来接受SWI Prolog 中的IPv4点分四元组字符串。使用DCGs (在假期期间走出舒适区?是的,我可以!)。这可能还需要我一个小时左右的时间,但也许读者中的某个人已经准备好了。在这种情况下我可以攻击IPv6 address strings .
最佳答案
我会尝试在 SWISH 上回答 this snippet
这是代码,以防链接不稳定......
:- use_module(library(dcg/basics)).
atom_ipv4(A, IPV4) :- atom_codes(A, Cs), phrase(ipv4(IPV4), Cs).
ipv4(D) -->
dotted(D).
ipv4(range(D, R)) -->
dotted(D), "/", integer(R).
dotted(address(A, B, C, D)) -->
octet(A), ".", octet(B), ".", octet(C), ".", octet(D).
octet(A) --> integer(A), {A < 256}.
注意:当然,该规范比此代码段捕获的规范更复杂,因为它允许十六进制,等等……我的目的是指出库的可用性(dcg/basics)
关于IPv4地址的Prolog定语从句语法程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548229/