PHP 5.3 рдореЗрдВ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдиреЛрдЯреНрд╕ рдпрд╛ рдлреЛрд░реНрде рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, PHP рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХрд╛рдо рдкрд░ рд░рдЦрдирд╛ред рдПрдХ рджрд┐рди рдореЗрдВ 2-3 рд▓реЛрдЧ - рдпрд╣ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдзреАрд░рдЬ рдХреЗ рдХрдЧрд╛рд░ рдкрд░ред

рд╕рднреА рдЙрдореНрдореАрджрд╡рд╛рд░ рдЕрд▓рдЧ рд╣реИрдВ, рдХреБрдЫ рд╕рд┐рд░реНрдл рдорд╣рд╛рди рд╣реИрдВ, рдХреБрдЫ рдмрджрддрд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреЛ рд▓реЛрдЧ рдмрджрддрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╣рдореЗрд╢рд╛ рд╡рд╣реА рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдЙрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╡рд╛рд▓ "PHP 5.3 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ" рдЙрдиреНрд╣реЗрдВ рдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ "рднрд╛рд╖рд╛ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ" рд╡рд┐рд╖рдп рдкрд░ рдЕрдЯрдХрд▓реЗрдВ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╕ рдбрд░рд╛рд╡рдирд╛ рд╣реИред

рджреВрд╕рд░реЗ, рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ PHP рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди "рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ"ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреБрдЦрдж рд╣реИ рдХрд┐ рдХрд╛рдо рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рджреВрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╕рд╛рдЗрдЯреНрд╕ред

рдФрд░ рддреАрд╕рд░рд╛, рдЙрдореНрдореАрджрд╡рд╛рд░ рдЬреЛ рдмрджрддрд░ рд╣реИрдВ, рд╢рд╛рдпрдж рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдкреИрдЯрд░реНрди - рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ, рд▓реЗрдХрд┐рди рдкреИрдЯрд░реНрди рд╕реЗ рдПрдХ рдПрдХреАрдХреГрдд рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рджрд░реНрджрдирд╛рдХ рд░реВрдк рд╕реЗ рд╢рд░реНрдордирд╛рдХ рди рд╣реЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдпрд╣ рд╡рд┐рд╖рдп рдРрд╕реЗ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдЙрдирдХреЗ рдХрдард┐рди рднрд╛рдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ (рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ) рдФрд░ рдЗрд╕ рдЙрдореНрдореАрдж рдХреЗ рд╕рд╛рде рдХрд┐ рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рдЖрддреНрдо-рд╕реБрдзрд╛рд░ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рд╛рдПрдЧрд╛ред

рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?

рдЖрдЗрдП PHP рдореЗрдВ рдПрдХ рдлреЛрд░реНрдЯ рджреБрднрд╛рд╖рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ!

рдХрд┐рд▓реЗ рдиреЗ рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдВрдЯреАрдореИрдЯрд░ рдХреА рджреВрд░ рдХреА рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдХреА рддрд░рд╣ред рд╕реНрдЯреИрдХ, рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рд╢рдмреНрдж, рдкреЛрд▓рд┐рд╢ рдиреЛрдЯреЗрд╢рди рдЙрд▓реНрдЯрд╛ ... рдпрд╣ рдХреЗрд╡рд▓ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ "рдЬреНрдЮрд╛рдирд╡рд░реНрдзрдХ" рд╣реИ рдФрд░ рдХрд┐рд╕реА рдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рдХрд░рддрд╛ рд╣реИред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдВрд╕реЛрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреЛрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рд╕рд░реНрд╡рд░ рдирд╣реАрдВред рдЗрд╕реЗ PHP 5.3 рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рднрд╛рд╖рд╛ рдХрд╛ 100% рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рд╣рдорд╛рд░реЗ рдмрд╛рдж рдЖрддреЗ рд╣реИрдВ, рд╡реЗ рдкрд╣рд▓реЗ рджрд┐рди рд╣реА рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рдЦреБрдж рдХреЛ рд▓рдЯрдХрд╛ рди рд▓реЗрдВред

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА, рд╣рдо рдЖрдкрд╕реЗ рд╕рд╣рдордд рдереЗ рдХрд┐ рд╣рдо PHP 5.3 рдореЗрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреЗ рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рдирдХрд╛ рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ:
  1. рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
  2. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдирд╛рдо рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдкрдиреА рдЬрдЧрд╣ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
  3. рдПрдХ рд╡рд░реНрдЧ - рдПрдХ рдлрд╝рд╛рдЗрд▓
  4. рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдСрдЯреЛрд▓реИрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  5. рд╣рдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрдзреАрди рдХрд░рддреЗ рд╣реИрдВ

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ \ FORTH рд▓реЗрдВред рд╣рдордиреЗ рдлреЛрд░реНрдЯ-рдорд╢реАрди рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЛ \ FORTH \ SYSTEM рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ \ FORTH \ EXCEPTIONS рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ, рдЬреЛ рд╕реНрд╡рдпрдВ рднреА рдХрдИ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - Fort рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП \ FORTH \ EXCEPTIONS \ SYSTEM, рдФрд░, рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП \ FORTH \ EXCEPTIONS \ STACKред

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ 2 рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдЗрд╕ рдХреЛрдб рдХреА рддрд░рд╣ рдХреБрдЫ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ:

<?php

$autoload = function ($class) {

	$path = explode('\\', $class);

	if ( 'FORTH' != array_shift($path) )
		throw new \FORTH\EXCEPTIONS\SYSTEM\NamespaceIsWrong();

	$filename = array_pop($path);

	require __DIR__ . '/' .
		implode('/', array_map('strtolower', $path)) . '/' . 
		$filename . '.php';

};

spl_autoload_register($autoload);


: ( , ?), SPL, (, , ).

autoload.php .


, -, . тАФ forth.php , forth.bat forth.sh , .

Windows forth.bat :
@echo off
SET PHP_PATH=Z:/usr/local/bin
%PHP_PATH%/php -q ./forth.php %1 > output.txt
type output.txt | more
pause


, sh/csh/bash .

, forth.php, , тАФ
namespace FORTH;
require __DIR__ . '/autoload.php';



-: .

тАФ . , , ().

PHP LIFO array_pop array_push, , . , , . :

<?php

namespace FORTH\SYSTEM;

class Stack extends Singleton {

	private $stack = array();

	public function push($obj) {

		array_push(
			$this->stack,
			$obj
		);

	}

	public function pop() {

		if ( $this->isEmpty() )
			throw new \FORTH\EXCEPTIONS\STACK\StackIsEmpty();
		
		return array_pop(
			$this->stack
		);

	}

	public function isEmpty() {

		return empty($this->stack);

	}

}


, тАФ ? , getInstance()?

тАФ \FORTH\SYSTEM\Singleton. , тАФ LSB, PHP 5.3 .

, array_push array_shift.


. - . ( ) : , ( ), ( ) , , .

\FORTH\SYSTEM\Word, тАФ \FORTH\SYSTEM\Dictionary, .

тАФ , тАФ .

, , - , \FORTH\SYSTEM\Dictionary StandartDictionary, , .

, ┬лDUP┬╗ тАФ , ┬лSWAP┬╗ тАФ "." тАФ . , :


		/*
		 *    ,    
		 */
		$dict->addWord(
			new Word(
				'+',
				2,
				2,
				function ($a, $b) {
					return (array)($a+$b);
				}
			)
		);



-. , , .

forth.php:
$data = \file_get_contents($argv[1]);

$parser = SYSTEM\Parser::getInstance();
$parser->loadRawData($data);
$dataForQueue = $parser->makeQueue();

$queue = SYSTEM\Queue::getInstance();
$queue->loadArray($dataForQueue);

$stack = SYSTEM\Stack::getInstance();

$executor = SYSTEM\Executor::getInstance();
$executor->setStack($stack);
$executor->execute($queue);


, , , - тАФ , . -, . тАФ -))

┬л┬╗ , тАФ , . , , тАФ , , тАФ -.

┬л┬╗. - тАФ . , .

тАФ , : , , , . , тАФ , , . , , .

:


$args = array();

for ( $i = 1; $i <= $word->getStackPopCount(); $i++ )
	$args[] = $this->stack->pop();

$args = \array_slice($args, 0, $word->getOperandsCount());

$result = \call_user_func_array($word->getCallback(), $args);

if ( !\is_null($result) ) {
	foreach ( $result as $res ) {
		$this->stack->push($res);
	}
}


?

PHP тАФ -. ( , ), , , .

- , , - тАФ .
- ┬л , ┬╗ тАФ .

- , тАФ , , , , , .

-))


, , Google Code, : code.google.com/p/php-forth/source/browse/trunk

GPL v.3


  1. ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29
  2. ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA
  3. ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F
  4. , , , , ...

Source: https://habr.com/ru/post/In114666/


All Articles