Softanza
DémarrerEnglish
Softanza
Un paradigme

Langages de motifs

Une seule grammaire en forme d'expression régulière, sur sept sortes de données : chaînes, listes, nombres, temps, tables, matrices et graphes, dans une bibliothèque, avec une seule habitude.

Une grammaire, sept sujets

L'expression régulière a été repensée la première, comme une classe, un fabricant et une bibliothèque de données. Sa grammaire, les accolades et l'arobase, a ensuite été élevée à six autres sortes de données, chacune une classe avec sa petite fonction. La même habitude vaut pour les sept : écrire le motif, demander Match, et demander au motif de s'expliquer.

  1. Chaînes. rx(pat(:email)) l'expression régulière, appuyée sur un moteur standard
  2. Listes. [@N1-3, @S], et les intervalles à pas, et les listes imbriquées Lx()
  3. Nombres. {@Property(Even) & @Property(Prime)} Nx()
  4. Temps. {@Event(Meeting) -> @Duration(30m) -> @Event(Break)} Tmx()
  5. Tables. {cols(3) & unique(id) & avgcol(salary:>40000)} Tx()
  6. Matrices. {shape(square) & property(symmetric)} Mx()
  7. Graphes. {@Node(start) -> @Edge(flows) -> @Node(done)} Gx()

Les motifs de cette liste sont écrits, pas exécutés. Les exécutions ci-dessous sont celles qui ont tenu leur promesse.

Sur une chaîne : le motif trouve chaque suite de chiffres, et les compte.

Softanza
o = Rgx("\d+")
o.MatchFirst("a1b22c333")
? @@( o.AllMatches() )
? o.NumberOfMatches()
Sortie
[ "1", "22", "333" ]
3

exécuté le 2026-10-09 02:11 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/regex/00_regex_narrated.ring(s'ouvre dans un nouvel onglet)

Sur une liste : deux ou trois nombres uniques pris dans un ensemble correspondent ; un nombre puis une chaîne ne correspond pas à une liste qui commence par une chaîne.

Softanza
oLx = new stzListex("[@N2-3{1; 2; 3}U]")
? oLx.Match([ 1, 2 ])
oLy = new stzListex("[@N, @S]")
? oLy.Match([ "hello", 1 ])
Sortie
1
0

exécuté le 2026-10-09 02:11 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/listex/01_listex_-_enhanced_test_suite.ring(s'ouvre dans un nouvel onglet)

Sur un nombre : une propriété est le motif, ici être premier.

Softanza
Nx = new stzNumbrex("{@Property(Prime)}")
? Nx.Match(17)
? Nx.Match(18)
Sortie
1
0

exécuté le 2026-10-09 02:11 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/numbrex/02_basic_property_matching.ring(s'ouvre dans un nouvel onglet)

Sur une matrice : une taille est le motif.

Softanza
oMx = new stzMatrex("{Size(3x3)}")
aMatrix = [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
]
? oMx.Match(aMatrix)
Sortie
1

exécuté le 2026-10-09 02:11 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/matrex/01_matching_exact_size.ring(s'ouvre dans un nouvel onglet)

Sur un graphe : un chemin d'un nœud, d'une arête et d'un nœud est le motif, reconnu sans égard à la casse ; un nœud absent ne correspond pas.

Softanza
g = new stzGraph("Mixed")
g.AddNodeXT(:a, "Start")
g.AddNodeXT(:b, "PROCESS")
g.AddNodeXT(:c, "end")
g.AddEdgeXT(:a, :b, "Flows")
g.AddEdgeXT(:b, :c, "COMPLETES")
gx = new stzGraphex("{@Node(start) -> @Edge(flows) -> @Node(process)}", g)
? gx.Match(g)
gy = new stzGraphex("{@Node(zzz)}", g)
? gy.Match(g)
Sortie
1
0

exécuté le 2026-10-09 02:11 dans la bibliothèque au commit 4a184e6f0 ; tiré de base/test/graphex/00_graphex_narrated.ring(s'ouvre dans un nouvel onglet)

Ce qu'on peut en dire

Les articles de la bibliothèque la comparent au domaine : Wolfram a des motifs de listes, l'unicité et les intervalles à pas ; Elixir, Haskell et Rust filtrent des structures ; des langages de requête de graphes et des langages d'événements complexes existent.

Ce que les articles ne trouvent dans aucun d'eux, c'est une seule grammaire en forme d'expression régulière sur sept sortes de données dans une bibliothèque, avec la même habitude de petite fonction, la même surface Match, Explain et Debug, et la même discipline de test. C'est la lecture que la bibliothèque fait elle-même du domaine, pas une enquête.

L'état honnête

en construction Deux des sept exécutions ci-dessus manquent, et elles manquent parce qu'elles ont échoué. Les propres tests de la bibliothèque pour les motifs de tables et de temps promettent une correspondance et n'en affichent aucune au commit lu pour cette page. Ils sont signalés à la bibliothèque, et les deux langages sont montrés ici sans exécution. Les quantificateurs de graphes sont analysés et pas encore utilisés. L'analyseur d'expressions régulières est un nom, et les frères du Regexuter sont une vision.

Sources : les articles regex, listes, nombres, temps, tables et matrices ; les gardes des dossiers de test de la bibliothèque, liés sous chaque exécution.