Just by change I stumpled upon a nice approach to proving that XSLT processors are Turing Complete. This approach by Unidex involves a XSLT definition that implements the Turing Machine and an example language of writing Turing machines in XML.
(Note that the page is there for quite some time so when it's down somewhere in future, use the WayBackMachine to access it)
If you want to try it, download the XSLT, download the example and put the two together with a simple snippet:
static void Main(string[] args) { var transform = new XslCompiledTransform(); transform.Load(XmlReader.Create(File.Open("turing.xslt", FileMode.Open))); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); var p = new XsltArgumentList(); p.AddParam("tape", "", "199"); transform.Transform(XmlReader.Create(File.Open("turing.xml", FileMode.Open)), p, sw); Console.WriteLine(sb.ToString()); Console.ReadLine(); }
Running this yields
Step number = 1 Tape = 199 Tape head ^ State = go_right Next symbol = 1 Next state = go_right Movement = right Step number = 2 Tape = 199 Tape head ^ State = go_right Next symbol = 9 Next state = go_right Movement = right Step number = 3 Tape = 199 Tape head ^ State = go_right Next symbol = 9 Next state = go_right Movement = right Step number = 4 Tape = 199 Tape head ^ State = go_right Next symbol = Next state = increment Movement = left Step number = 5 Tape = 199 Tape head ^ State = increment Next symbol = 0 Next state = increment Movement = left Step number = 6 Tape = 190 Tape head ^ State = increment Next symbol = 0 Next state = increment Movement = left Step number = 7 Tape = 100 Tape head ^ State = increment Next symbol = 2 Next state = stop Movement = left The Turing machine has halted. Final state = stop Final tape = 200 Tape head ^
No comments:
Post a Comment