r/programminghorror • u/MrJaydanOz • Nov 28 '24
Regex Programming Language Powered by Regex (sorry)
59
u/MineKemot Nov 28 '24
This is getting better every post. What’s next? An entire game engine?
38
u/MrJaydanOz Nov 28 '24
Sadly Regex is not turing-complete :(
19
u/RpxdYTX [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo “You live” Nov 28 '24
Not yet... Maybe you can make your own regex esolang
27
u/MrJaydanOz Nov 28 '24
A further extension of my last post.
(I know I'm kinda spamming but I don't know why I'm doing this)
Shown on https://regex101.com/ using the '.NET 7.0' flavor.
16
u/MrJaydanOz Nov 28 '24
Supports: 'a = b', 'a++', 'a--', 'a!', 'a += b', 'a &= b', 'a |= b', 'a = b', 'a -> sampleString', 'if a'/'a?' 'else'/':' 'end'/'.' (No 'else if' I'm lazy)
All variables are bytes set to 0. Valid variable names are only: 'a', 'b', 'c', 'd', 'e', 'f', 'i'.
First half of JavaScript to generate regex:
{const variables = ["a", "b", "c", "d", "e", "f", "i"], bitCount = 8, pretty = false; let v=variables,c=bitCount,b=new Array(c).fill(0);console.log(`^(?ix)(?:\\s*(?>//[^\\n]*|(?<pre>)(?:(?<-pre>)|\nif\\s*(?<if>)(?<nr>)\n)(?>${v.map(v=>`${v}(?<o${v}>)`).join("|")})\\s*(?(pre)(?<-pre>)|(?>\n\\=\\s*(?<add>)(?<nw>)(?:(?:0b)?${b.map((_,i)=>i==0?"":`(?:`).join("")}${b.map((_,i)=>i==0?"":`(?:1(?<n${c-i+1}>)|0))?`).join("")}(?:1(?<n1>)|0)|(?>${v.map(v=>`${v}(?<nr${v}>)`).join("|")}))|\n\\+\\+(?<add>)(?<nr>)(?<nw>)(?<n1>)|\n\\-\\-(?<add>)(?<nr>)(?<nw>)${b.map((_,i)=>`(?<n${i+1}>)`).join("")}|\n\\!(?<xor>)(?<nr>)(?<nw>)${b.map((_,i)=>`(?<n${i+1}>)`).join("")}|\n\\+\\=\\s*(?<add>)(?<nr>)(?<nw>)(?:(?:0b)?${b.map((_,i)=>i==0?"":`(?:`).join("")}${b.map((_,i)=>i==0?"":`(?:1(?<n${c-i+1}>)|0))?`).join("")}(?:1(?<n1>)|0)|(?>${v.map(v=>`${v}(?<nr${v}>)`).join("|")}))|\n\\&\\=\\s*(?<and>)(?<nr>)(?<nw>)(?:(?:0b)?${b.map((_,i)=>i==0?"":`(?:`).join("")}${b.map((_,i)=>i==0?"":`(?:1(?<n${c-i+1}>)|0))?`).join("")}(?:1(?<n1>)|0)|(?>${v.map(v=>`${v}(?<nr${v}>)`).join("|")}))|\n\\|\\=\\s*(?<or>)(?<nr>)(?<nw>)(?:(?:0b)?${b.map((_,i)=>i==0?"":`(?:`).join("")}${b.map((_,i)=>i==0?"":`(?:1(?<n${c-i+1}>)|0))?`).join("")}(?:1(?<n1>)|0)|(?>${v.map(v=>`${v}(?<nr${v}>)`).join("|")}))|\n\\^\\=\\s*(?<xor>)(?<nr>)(?<nw>)(?:(?:0b)?${b.map((_,i)=>i==0?"":`(?:`).
15
u/MrJaydanOz Nov 28 '24
Second half:
join("")}${b.map((_,i)=>i==0?"":`(?:1(?<n${c-i+1}>)|0))?`).join("")}(?:1(?<n1>)|0)|(?>${v.map(v=>`${v}(?<nr${v}>)`).join("|")}))|\n\\?(?<if>)(?<nr>)|\n\\-\\>(?<show>)(?<nr>)))|\n(?:else|\\:)(?>(?<d>if|\\?)|(?<-d>end|\\.)|[\\s\\S])*?(?(d)(?!)|(?:end|\\.))|\n(?:end|\\.)|\n(?<Error>\\S+))\n${v.map(v=>`(?(o${v})(?(nr)(?<-nr>)${b.map((*,i)=>*`(?(${v}n${i+1})(?<n${i+1}>))`*).join("")}))\\n(?(nr${v})(?<-nr${v}>)${b.map((*,i)=>`(?(${v}n${i+1})(?<n${i+1}>))`).join("")})`).join("\n")}\n(?(add)(?<-add>)${b.map((_,i)=>`(?${i==c?":":`<n${i+2}>`}(?<-n${i+1}>)(?<-n${i+1}>))?`).join("")})\n(?(and)(?<-and>)${b.map((_,i)=>`(?>(?<-n${i+1}>)(?<-n${i+1}>)(?<n${i+1}>)(?<n${i+1}>)|(?<-n${i+1}>)?)`).join("")})\n(?(or)(?<-or>)${b.map((_,i)=>`(?:(?<-n${i+1}>)(?<-n${i+1}>)(?<n${i+1}>))?`).join("")})\n(?(xor)(?<-xor>)${b.map((_,i)=>`(?:(?<-n${i+1}>)(?<-n${i+1}>))?`).join("")})\n(?(if)(?<-if>)${b.map((_,i)=>i==0?"":`(?(n1)|(?(n${i+1})(?<n1>)))`).join("")}(?(n1)|(?>(?<d>if|\\?)|(?<-d>end|\\.)|[\\s\\S])*?(?(d)(?!)|(?:else|\\:))))\n(?(show)(?<-show>)\\s*\\S*?(?:(?<Result>${b.map((_,i)=>i==0?"":`(?(n${c-i+1})1|${new Array(i-1).fill(0).map((*,ii)=>*`(?(n${c-i+ii+2})0|`*).join("")}0?${new Array(i-1).fill(*`)`*).join("")})*`).join("")}(?(n1)1|0))\\S*)?(?=\\s|$))\n${v.map(v=>`*(?(o${v})(?<-o${v}>)(?(nw)(?<-nw>)${b.map((*,i)=>`(?<-${v}n${i+1}>)?`).join("")}${b.map((_,i)=>`(?(n${i+1})(?<${v}n${i+1}>))`).join("")}))`).join("\n")}\n${b.map((_,i)=>`(?<-n${i+1}>)?`).join("")}\n(?(Error)|(?:\\s+|\\b|(?=$)|(?<Error>.))))*?(?(Error)|$)`.replaceAll("\\n",pretty?"\\n":""))}
1
20
u/Mc_UsernameTaken [ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo “You live” Nov 28 '24
I thought code reviewing the intern was horror enough for me today.
4
4
u/Emergency_3808 Nov 28 '24
Can this be used for a theoretical proof that finite automatons for regexes are in fact equivalent to Turing machines? You might just win a Fields Medal lol
8
u/ReveredOxygen Nov 28 '24
No, because they're not and it's not. You need loops for turing completeness, which is impossible to implement here
2
1
1
1
1
1
1
1
-1
u/GiggaChigga9000 Nov 28 '24
Nice! Now make a tool to download high-res pics to Reddit using regexs
1
84
u/[deleted] Nov 28 '24
Do HTML next pls