[img[0 1 0 1... Printer TM|./images/TM 1.png]]
[img[1111... Duplicator TM|./images/TM 2.png]]
[img[2 Bit Branch Prediction SM|./images/SM 1.png]]
[img[ABC Song DFA|./images/dfa 2.png]]
/*{{{*/\nThe Applied Computing Technology Laboratory at Villanova University is an idea factory,\n dedicated to the discovery of new uses of computer technology in all areas of the human\n experience. We solve problems, big and small, using computers. Students and faculty \n collaborate on the full spectrum of computing innovation, from basic and applied research\n to product development and release, as an incubator of ideas and a complement to other\n research activities in our department and university. To that end, we collaborate with \n Industry, seek out interdisciplinary partnerships and funding sources, and submit papers \n for peer review, always with an eye toward the future of computing that lies just beyond the horizon.\n - Villanova University ACTLab\n/*}}}*/\n\nThe [[Villanova University ACTLab|http://actlab.csc.villanova.edu/]] is a research organization at Villanova University lead by the Department of Computing Sciences to encourage independent (undergraduate & graduate) student research.
jFAST was produced and presented as my Senior Project at Villanova University to complete the requirements for a B.S. in Computer Science. It was initially the product of one semester of work, and at that point offered a smaller feature-set, less intuitive interaction methods, and only supported DFA. I subsequently continued development on the system, and it has been in sporadic development since then (about 1 year total) in collaboration with Dr. Way of the Villanova University Department of Computing Sciences. I plan on continuing development into the forseable future and welcome any comments or feedback on the system (of any type: the good, the bad, and the ugly).
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n
[img[Bit Prediction DFA|./images/dfa 1.png]]
The developer of jFAST may be contacted by email at @@color(green): the_Fremen@hotmail.com@@.\nPlease include the word "jFAST" somewhere in the subject to assure that it is noticed.\n\nFeedback of all types is welcome and encouraged.\n
jFAST ©2005,2006 Timothy M White\nAll Rights Reserved.
[[News]]\n[[What Is jFAST?]]\n[[Who Is jFAST For?]]\n[[Why Use jFAST?]]\n[[User Suggested Improvements]]\n[[Terms of Usage]]\n[[Copyright]]
''Complete Packages'': //Including the program, sample FSM, help information, and source code//\n [[msi installer: jFAST.msi|./jFAST.msi]] //Windows Specific - Only copies files and creates shortcuts. Will not add anything to the registry.//\n [[zip file: jFAST.zip|./jFAST.zip]]\n [[tar file: jFAST.tar|./jFAST.tar]]\n----\n ''Program Only'': //Including the program only//\n [[jar file: jFAST.jar|./jFAST.jar]]\n----\n ''Sample FSM'': //Package containing all sample FSM//\n [[zip file: fsm.zip|fsm.zip]]\n [[tar file: fsm.tar|fsm.tar]]\n----\n ''Source Code Only'': //Package containing the entire source code//\n [[zip file: jFAST_src.zip|jFAST_src.zip]]\n [[tar file: jFAST_src.tar|jFAST_src.tar]]\n
\n''Deterministic Finite Automata''\n[[Bit Prediction DFA]] | [[ABC Song DFA]]\n\n''Non-deterministic Finite Automata''\n[[{aa*bc or aa*c} NFA]] | [[{zero zero* one} NFA]]\n\n''Pushdown Automata''\n[[{0^k 1^k} PDA]] | [[Simple Expression Evaluator PDA]] | [[{w wR} PDA]]\n\n''State Machines''\n[[2 Bit Branch Prediction SM]]\n\n''Turing Machines''\n[[0 1 0 1... Printer TM]] | [[1111... Duplicator TM]] | [[n + m TM]]
The following errors have been observed and are in the process of being corrected. If you have experienced an error that is not listed here please email a description of the error to [[the jFAST team|mailto:the_Fremen@hotmail.com]].\n\n* An "Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException" occuring when an automaton is loaded by the Simulation Interface. (Exception is non-fatal).\n* Several example FA are incorrectly or misleadingly labeled.\n* Show button labels option: behavior is erratic.\n* Interactive Mode selection is not properly retained upon leaving the Simulation Interface.\n* "Restart" in interative mode doesn't erase the blue color of current transition.\n* When returning from the run mode to the drawing mode, the menu doesn't reappear until you click something (Platform dependent).\n\n''Special thanks to those users who have submitted error reports or suggestions.''
''Deterministic Finite Automata''\n[[Accepts (abc+)+|./fsm/(abc+)+ dfa.xml]]\n[[Accepts any string ending with '3?'|./fsm/1 three before end nfa.xml]]\n[[Accepts ab|./fsm/ab dfa for tutorial.xml]]\n[[Accepts variations on the 'ABC Song'|./fsm/abc song.dfa]]\n[[Accepts complex bit strings|./fsm/complicated binary strings.xml]]\n[[Determinism Test|.fsm/determinism test.xml]]\n[[Simple State Machine in DFA form|./fsm/dfa test.xml]]\n[[An interesting DFA|./fsm/interesting dfa.xml]]\n\n''Nondeterministic Finite Automata''\n[[Accepts 0^k where k is a multiple of 2 or 3|./fsm/0^k where k is a multiple of 2 or 3.xml]]\n[[Accepts a+bc or a+c|./fsm/a+bc or a+c for tutorial.xml]]\n[[Accepts a complicated string pattern|./fsm/a+bc or a+c for tutorial.xml]]\n[[A simple nfa|./fsm/nfa test.xml]]\n[[An nfa formed by union of two nfa|./fsm/simple combination nfa.xml]]\n\n''Pushdown Automata''\n[[Simple PDA|./fsm/pda test.xml]]\n[[Simulates a simple compiler|./fsm/Simple Expression Evaluator.xml]]\n[[Accepts w-w^n|./fsm/w-w^n.xml]]\n[[Accepts wwR|./fsm/wwR.xml]]\n\n''Turing Machines''\n[[Enumerates 0 1 0 1|./fsm/0_1_0_1.xml]]\n[[Transcribes A to A0A|./fsm/1110111.xml]]\n[[Adds n and m|./fsm/n+m.xml]]\n\n''State Machines''\s\n[[Simulates a 2-bit Bit Prediction scheme|./fsm/bit prediction.xml]]\n
''Installing in Windows XP''\nDownload the jFAST program and sample files (in msi format) [[here|jFAST.msi]]. Run jFAST.msi, and the installer will prompt you for all necessary information. //No entries are made to the registry. Uninstaller completely removes jFAST.//\n\n''Installing in Windows 98/2000/ME''\nDownload the jFAST program and sample files (in zip format) [[here|jFAST.zip]]. Extract the files to a chosen folder. To use jFAST double-click on jFAST.jar. //No installer is provided - manually deleting all files in the selected folder will completely remove jFAST.//\n\n''Installing on Other Platforms''\nDowload the jFAST program as a [[zip|jFAST.zip]] or [[tar|jFAST.tar]]. Extract the files to a chosen folder. To use jFAST run jFAST.jar. //No installer is provided - manually deleting all files in the selected folder will completely remove jFAST.//\n\n/*{{{*/\n** jFAST requires the Java Runtime Environment version 1.4. It may be obtained from [[Sun|http://java.sun.com]]. **\n/*}}}*/
jFAST provides two distinct interfaces. The first is the Editing Interface, in which one creates, modifies, and labels FSM. This interface is designed to be similar to a painting program, and allows states, transitions, and labels to be drawn onto the FSM canvas. Here also, one creates an alphabet for the FSM, and input may be added if desired. At any time components may be moved by simply dragging them around the canvas, edited by right clicking on them, and deleted by selecting them and pressing the delete key. Once a FSM is created, it may be simulated via the Simulation Interface. This interface assumes the size of the full screen, and centers the FSM. A user may now simulate the FSM and watch as the FSM steps through a provided input, or they may interactively explore a FSM and provide the input on the fly. Finally, this interfac provides a view of the various additional properties of a FSM such as stack or tape.
[[What Is jFAST?]]\n[[About jFAST]]\n[[Screenshots]]\n[[FSM Warehouse]]\n[[Tutorial]]\n[[Download]]\n[[Contact jFAST]]\n\n[img[./images/jFAST%20Icon.png]] \n[img[http://sflogo.sourceforge.net/sflogo.php?group_id=168651&amp;type=1][http://sourceforge.net]]
\n\n\n* ''May 2006:'' jFAST is now available on [[SourceForge.net|http://sourceforge.net/projects/jfast-fsm-sim]]. Access to the latest jFAST souce code is available via [[SourceForge's CVS|http://sourceforge.net/cvs/?group_id=168651]].\n* ''May 2006:'' jFAST is now compatible (& compilable) with Eclipse. To download the Eclipse-friendly source code, please click [[here|jFAST_Eclipse.zip]].\n* ''May 2006:'' a list of [[User Suggested Improvements]] has been established. Please contribute your ideas for jFAST!\n* ''May 2006:'' a list of [[Errata]] has been compiled. All reports of problems are appreciated.\n* ''March 2006:'' jFAST was recently featured at the 2006 Technical Symposium on Computer Science Education ([[SigCSE 2006]]). The presentation and paper are now available [[online|SigCSE 2006]].
[[Editing Interface]]\n[img[Editing Interface|./images/basic 1.png]]\n[[Simulating Interface]]\n[img[Simulating Interface|./images/sim 1.png]]
<<search>><<closeAll>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
[[jFAST SigCSE Presentation|jFAST_SigCSE_presentation.ppt]]\n[[Paper (in .pdf format): jFAST: A Java Finite Automata Simulator|jFAST_SigCSE_paper.pdf]]
[img[Simple Expression Evaluator PDA|./images/pda 2.png]]
''Deterministic Finite Automata''\n[[Bit Prediction DFA]] | [[ABC Song DFA]]\n\n''Non-deterministic Finite Automata''\n\n[[{aa*bc or aa*c} NFA]] | [[{zero zero* one} NFA]]\n\n''Pushdown Automata''\n\n[[{0^k 1^k} PDA]] | [[Simple Expression Evaluator PDA]] | [[{w wR} PDA]]\n\n''State Machines''\n\n[[2 Bit Branch Prediction SM]]\n\n''Turing Machines''\n\n[[0 1 0 1... Printer TM]] | [[1111... Duplicator TM]] | [[n + m TM]]
a Java Finite Automata Simulator
/***\nPlace your custom CSS here\n***/\n/*{{{*/\nh1,h2,h3,h4,h5 { color: #000; background: transparent; }\n/*}}}*/\n
/***\n!Colors Used\n*@@bgcolor(#fff): #fff - Background white@@\n*@@bgcolor(#000): #000 - Black text@@\n*@@bgcolor(#700): #700 - Hover Red@@\n*@@bgcolor(#eee): #eee - Background grey@@\n*@@bgcolor(#ddd): #ddd - Background grey@@\n----\n*@@bgcolor(#8cf): #8cf - Background blue@@\n*@@bgcolor(#18f): #18f - Top blue@@\n*@@bgcolor(#04b): #04b - Mid blue@@\n*@@bgcolor(#014):color(#fff): #014 - Bottom blue@@\n*@@bgcolor(#ffc): #ffc - Bright yellow@@\n*@@bgcolor(#fe8): #fe8 - Highlight yellow@@\n*@@bgcolor(#db4): #db4 - Background yellow@@\n*@@bgcolor(#841): #841 - Border yellow@@\n*@@bgcolor(#703):color(#fff): #703 - Title red@@\n*@@bgcolor(#866): #866 - Subtitle grey@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\n\nbody {\n background: #fff;\n color: #000;\n border-top: thick solid black;\n border-left: thick solid black;\n}\n\na{\n color: green;\n font-weight: bold;\n}\n\na:hover{\n color: #700;\n}\n\na img{\n border: 0;\n}\n\n.button {\n color: #014;\n border: 1px solid #fff;\n}\n\n.button:hover {\n color: #014;\n background: #fe8;\n border: 1px solid #db4;\n}\n\n.button:active {\n color: #fff;\n background: #db4;\n border: 1px solid #841;\n}\n\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header {\n font-size: 18px;\n font-varient: small-caps;\n font-weight: bolder;\n \n color: white;\n}\n\n.headerShadow {\n padding: 1.0em; }\n\n.headerForeground {\n padding: 1.0em; }\n\n/*}}}*/\n/***\n!General tabs /%=================================================%/\n***/\n/*{{{*/\n\n.tabSelected{\n color: #014;\n background: #eee;\n border-left: 1px solid #ccc;\n border-top: 1px solid #ccc;\n border-right: 1px solid #ccc;\n}\n\n.tabUnselected {\n color: #fff;\n background: #999;\n}\n\n.tabContents {\n color: #014;\n background: #eee;\n border: 1px solid #ccc;\n}\n\n.tabContents .button {\n border: 0;}\n\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid #04b;\n}\n\n#sidebarOptions .sliderPanel {\n background: #ddd;\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: #04b;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #fff;\n background: #04b;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #04b;\n background: #fff;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n border: 1px solid #841;\n background: #db4;\n color: #014;\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #014;\n background: #fff;\n}\n\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #18f;\n border: 1px solid #04b;\n}\n\n.popup hr {\n color: #014;\n background: #014;\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: #04b;\n}\n\n.popup li a, .popup li a:visited {\n color: #eee;\n border: none;\n}\n\n.popup li a:hover {\n background: #014;\n color: #fff;\n border: none;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: #866;\n}\n\n.title {\n color: #04b;\n font-varient: small-caps;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #04b;\n}\n\n.tagging, .tagged {\n border: 1px solid #eee;\n background-color: #eee;\n}\n\n.selected .tagging, .selected .tagged {\n background-color: #ddd;\n border: 1px solid #bbb;\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: #014;\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #8cf;\n border: 0;\n}\n\n.sparktick {\n background: #014;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.cascade {\n background: #eef;\n color: #aac;\n border: 1px solid #aac;\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid #db4;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #333;\n}\n\n.viewer th, thead td {\n background: #996;\n border: 1px solid #666;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #666;\n}\n\n.viewer pre {\n border: 1px solid #fe8;\n background: #ffc;\n}\n\n.viewer code {\n color: #703;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #666;\n color: #666;\n}\n\n.highlight, .marked {\n background: #fe8;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #04b;\n}\n\n.editor textarea {\n border: 1px solid #04b;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n/*}}}*/
jFAST is free to use, modify, and distribute.\n\nMore specifically, jFAST is released under the [[GNU General Public License|http://www.gnu.org/copyleft/gpl.html]], with the additional restriction that:\n''\nAny redistributions of jFAST in binary or source form for any purposes must include a copy of, or reference to, an officially released version of jFAST source code, license, and copyright information (such as a reference to this website). Any redistribution of modified versions of jFAST in binary or source code form for any purposes must include \n* 1) a copy of, or reference to, an officially released version of jFAST source code, license, and copyright information (such as a reference to this website), \n* 2) a notice that the redistributed form of jFAST is modified from (//i.e.// not an official release) of the software, and \n* 3) a short description of differences between the redistributed code and an official release.\n''\nShould one modify or redistribute jFAST software, a visible reference to it's creator (Timothy M. White), and the Villanova University ACTLab would certainly be appreciated.\n\nIt is also suggested that a copy of any changes be sent to the [[jFAST team|Contact jFAST]] so that they may be incorporated into future jFAST packages. Contributors will (of course) be attributed appropriately.\n\nEnjoy!
This site is built using the free TiddlyWiki Software, which has been released into the open domain.\n\nThe TiddlyWiki Homepage may be found at http://www.tiddlywiki.com/.
TiddlyWiki is a software tool for providing completely self-contained wiki-like websites using Javascript, css, and html.\n\nThe TiddlyWiki Homepage may be found at http://www.tiddlywiki.com/.
Run jFAST. Observe the main jFAST Screen. The buttons in the upper left corner under the menu bar are used for placing objects such as states and transitions onto the automaton's canvas. The buttons are located in the screenshot labeled jFAST User Interface.\n\nObjects are placed by selecting the appropriate button (state tool, label tool) and then clicking on the desired location. To place a transition, select the transition tool and then click first on the start state and next on the destination state.\n\nTo delete an object you may right click on the object and select "delete", or simply select the object by clicking on it and then press the delete/backspace key. States and labels may be 'dragged' to relocate them; transitions will redraw appropriately.\n\nFor the input and alphabet tools, click on the button and a dialog will appear with which you may edit the alphabet or input.\n\nBy default, the automaton is originally a DFA. In order to create a NFA, PDA, or Turing machine, select File -> New. A dialog will appear allowing selection of the desired automaton type.\n\nBefore you may simulate an automaton three things must be complete: first, there must be one or more states located on the canvas, of which one is a start state; second, there must be an alphabet with one or more symbols; and third, any transitions must be labeled with a symbol from the alphabet.\n\nThe properties of states and transitions may be adjusted by right clicking on the object. This will allow you to make a state an accept, normal (reject), or start state, as well as allowing you to set the transition's symbols. Multiple symbols may be set for a transition by selecting several symbols in the transition properties dialog.\n\nThe direction of a transition is indicated in two ways. First, the transition has a circle on the state that it points to, or is its destination. The edge without the circle is its origin. Also, if you mouse over a transition then it highlights that transition in blue, with the destination state also highlighted by a blue box.\n\nWhen you create an alphabet, make sure that only those symbols you wish to incorporate into the alphabet are displayed on the screen. You may add symbols by entering a string of any length into the text box and then clicking the green "+" button; similarly, a symbol may be removed by selecting it from the list and clicking the red "-" button.\n\nThe input string is set by clicking on symbols in the alphabet display with the left mouse button; a symbol may be removed by right clicking on that symbol in the input display. A symbol may be added at an arbitrary location in the input set by selecting (left clicking) on the desired location in the input display and then selecting a symbol from the alphabet display.\n\nThere are two ways to simulate an automaton. For a quick test to determine if your automaton is doing what you expect, make sure that an input is set and then select Automata -> Test On Input from the menu bar. A dialog box will report whether your string was accepted or rejected by the automaton.\n\nAlternatively, you can fully simulate an automaton by clicking on the Run tool (the stick figure on the end of the toolbar). This will open a new screen, and the automaton may be run by selecting File -> Begin Simulation or clicking on the Start Simulation button. You may also interact with the automaton by choosing Settings -> Interactive Mode and then clicking on the Start Simulation button. You may return to the editing screen by selecting File -> Exit Simulation Mode.
The following is a list of jFAST improvements and enhancements that have been suggested by users, and which we plan to include in future versions of jFAST.\n* Changeable font sizes. \n* Optional ability to enter an input as a string (//i.e.// using a keyboard) instead of selecting from a list.\n* Redesign Simulation Screen to be more intuitive (perhaps with a toolbar).
jFAST is a simple, easy-to-use tool for creating, editing, and simulating finite automata and state machines. It provides a simple and intuitive method of interacting with numerous types of supported finite state machines (FSM), including deterministic finite automata (DFA), non-deterministic finite automata (NFA), pushdown automata (PDA), state machines (SM), and Turing machines (TM). jFAST also provides user's with the ability to check their FSM on different inputs, and provides clear and meaningful messages when mistakes are encountered.
jFAST is a convenient tool for anyone who is interested in finite state machines, and would like to be able to see FSM in action. jFAST is aimed primarily at students and teachers in organized classes. For teachers, it provides a simple tool for creating and presenting FSM to an entire class, as well as methods for providing FSM to and recieving FSM from students. Furthermore, it provides a simple way of checking student-created FSM with ease.\n\nFor students, jFAST is an invaluable tool for exploring FSM. It allows students to obtain the sample FSM used by teachers and books, and then experiment with them to gain a better understanding of what those FSM are doing and how they accomplish it. Furthermore, students may also create and check their own FSM - a useful feature for everything from self-exploration of FSM to checking homework assignments.\n\nThough jFAST is aimed primarily at the classroom environment, jFAST is a useful tool for anyone who would like to explore the fascinating subject of FSM. The same features that make it ideal for use by students and teachers allow it to be of great assistance to those who are investigating FSM with out the benefit of the organized classroom.
jFAST is unique for several reasons. First, its user interface is simpler and more conventional then any other automata simulator available. Instead of relying on obscure or ideosyncratic interactions, jFAST's interface will seem familiar to any user of a Windows(TM) or Mac(TM) environment. Furthermore, jFAST provides access to a variety of different FSM with one uniform interface - allowing easy transition to more complex FSM as a user gains familiarity with FSM. Finally, jFAST provides an extensive online manual and help site. Included on this site are an extensive warehouse of sample FSM, detailed tutorials on using and interacting with jFAST, and links to detailed explanations of FSM themselves.
jFAST - a Java Finite Automata Simulator
[img[n + m TM|./images/TM 3.png]]
[img[{0^k 1^k} PDA|./images/pda 1.png]]
[img[{aa*bc or aa*c} NFA|./images/nfa 1.png]]
[img[{w wR} PDA|./images/pda 3.png]]
[img[{zero zero* one} NFA|./images/nfa 2.png]]