{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A Simple Implementation of Push Down Automaton:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Defining the 6 tuples:\n",
"> * Q-->finite set of sets\n",
"> * Sigma-->finite set of input alphabet\n",
"> * Gamma-->finite set of stack alphabet\n",
"> * Delta-->transition relation\n",
"> * Q0-->start state\n",
"> * Z-->initial stack symbol\n",
"> * F-->set of accepting states\n",
"\n",
"# Defining the states:\n",
"\n",
"* state 0: starting state\n",
"\n",
"* state 1:From state 0 whenever it sees a 1 or 2, it moves to state 1+pushes the element onto the stack\n",
"* state 1:From state 1 whenever it sees a 1 or 2, it remains in state 1+pushes the element onto the stack\n",
"\n",
"* state 2:From state 1 whenever it sees a 0, it moves to state 2+pops from the stack\n",
"* state 2:From state 1 whenever it sees a 0, it remains in state 2+pops from the stack\n",
"\n",
"* state 3:From state 0, if it sees a 0,it moves to state 3,the rejected state\n",
"* state 3:From state 2, if it sees a 1 or 2 , it moves to state 3, the rejected state\n",
"* state 3:If at the end, the stack is not empty, it moves to state 3,the rejected state\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter the String:123456\n",
"The String is rejected\n"
]
}
],
"source": [
"#stack functions\n",
"def push(a,list1):\n",
" #pushing to the stack/adding to the top of the stack\n",
" list1.append(a)\n",
" return 1\n",
"\n",
"def pop(list1):\n",
" #for poping from the stack/removing the top element of the stack\n",
" index=len(list1)-1\n",
" if (index>0):\n",
" list1.pop(index)\n",
" return 1\n",
" else:\n",
" return 0\n",
"\n",
"# Q={0,1,2,3}\n",
"# Sigma={0,1,2}\n",
"# Starting state={0}\n",
"# Z=#\n",
"# F={2}\n",
"\n",
"#setting the initial stack symbol\n",
"stack=['#']\n",
"#setting the starting state\n",
"state=0\n",
"\n",
"#taking the input\n",
"input_string=input('Enter the String:')\n",
"\n",
"#performing the operations\n",
"l=len(input_string)\n",
"i=0\n",
"if l%2==0:\n",
" while i<l//2:\n",
" letter=int(input_string[i])\n",
" #print(letter)\n",
" if letter in [1,2]:\n",
" push(letter,stack)\n",
" state=1\n",
" #print(\">state=1\")\n",
" else :\n",
" state=3\n",
" #print(\">1.state=3\")\n",
" break\n",
" i+=1\n",
" \n",
" while i<l:\n",
" letter=int(input_string[i])\n",
" #print(letter)\n",
" if state==3:\n",
" break\n",
" if letter==0:\n",
" state=2\n",
" #print(\">2.state=2\")\n",
" pop(stack)\n",
" else:\n",
" state=3\n",
" #print(\">2.state=3\")\n",
" break\n",
" i+=1\n",
"else:\n",
" state=3\n",
" #print(\"3state=3\")\n",
" \n",
"if state==2 and len(stack)!=1:\n",
" state=3\n",
" \n",
"#print(state)\n",
"#print(len(stack))\n",
"\n",
"#checking the final state and displaying the result\n",
"if(state==2):\n",
" print(\"The String is accepted\")\n",
"else:\n",
" print(\"The String is rejected\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}