我有一些文本文件要解析,但是示例停止和启动的顺序可能不同。 Stop可能首先出现或最后出现,这是一个虚拟的例子,因为有多个变量,如stop,start ...
Exemple1.txt
停止:1
开始:2
exemple2.txt
开始:9
停止:4
我知道如何解析启动和停止,当启动是第一个而停止是第二个时,但是当它们以随机顺序排列时,我将如何进行解析。
parseStart(D) --> "start: " , integer(D).
parseStop(D) --> "stop: " , integer(D).
我从stdin收到要解析的文件,所以我read_string解析第一行,将其转换为字符列表,并执行短语(parseStart(Startint),line1),与第二行相同,但是比我必须知道的顺序不多。
也许我可以做类似的事情
parseBoth(StartInt,StopInt) --> parseStart(startInt) <|> parseStop(StopInt)
然后执行两次并检查两者是否统一?但是,这似乎是一个hack,我想知道是否有更好的方法可以做到这一点?
编辑:停止,开始只是众多示例之一,我有许多以随机顺序排列的dcg表达式,我将如何执行此操作,因为尝试所有顺序都意味着我必须写6! 6个可能的stop,start,end,time ...的谓词
也许像:
parse(start(Start), stop(Stop)) -->
first(Token),
rest(Token, Start, Stop).
first(start) --> "start: ".
first(stop) --> "stop: ".
rest(start, Start, Stop) -->
integer(Start), stop(Stop).
rest(stop, Start, Stop) -->
integer(Stop), start(Start).
start(Start) --> "start: " , integer(Start).
stop(Stop) --> "stop: " , integer(Stop).