Сплав: используйте для String

Как я могу взять длину строки в сплаве?

Если я хочу сказать, что пароль должен состоять как минимум из 8 символов, как я могу выразить длину этой строки?

Моя подпись пароля:

sig Password{пароль: одна строка}


person user2791940    schedule 18.09.2013    source источник


Ответы (1)


String в Alloy очень похож на любой другой знак. Единственное отличие состоит в том, что вы можете назначать строковые литералы полям типа String, например,

some p: Password | p.password = "secret"

Строковые функции в Alloy не поддерживаются. Решение ограничений, таких как

some p: Password | len[p.password] > 5

потребуется специализированный решатель строк, которым Alloy не является.

Если вас интересует только длина пароля, вы можете сделать что-то вроде

sig Char {}
sig Password { 
   password: seq Char 
} { 
   #password > 5
}

Если вам нужно решить более сложные ограничения строк (включая регулярные выражения), вам следует обратиться к специализированным программам решения строк, например, Хампи.

person Aleksandar Milicevic    schedule 21.09.2013