for educational purposes only
Installs: 381
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/verfriemelt/pp
Requires
- php: ^8.2
- ext-intl: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- phpbench/phpbench: ^1.3.1
- phpstan/phpstan: ^1.12.11
- phpstan/phpstan-phpunit: ^1.4.1
- phpstan/phpstan-strict-rules: ^1.6.1
- phpunit/phpunit: ^10.5.38
README
this is a little research project inspired by this excellent youtube series by low level javascript.
elf parser
$ php src/run.php false.i386
Array
(
    [header] => 7fELF
    [plattform] => 32bit
    [endianess] => little endian
    [version] => 1
    [os ( mostly wrong )] => System V
    [ABI Version] => 0
    [unsed] =>
    [object type] => ET_DYN
    [architecture] => x86
)
ipv4 packet parser
$ php src/ip4.php
Array
(
    [Version] => 4
    [IHL] => 5
    [DSCP] => 0
    [ECN] => 0
    [Total Length] => 68
    [Identification] => 44299
    [Flags] => 0
    [Fragment Offset] => 0
    [TTL] => 64
    [Protocol] => 17
    [Header Checksum] => 29298
    [Source Ip] => 172.20.2.253
    [Destination Ip] => 172.20.0.6
)
polish notation evaluation
$ php src/polish.php "(+ (+ (* 1 1000) (* 33 10)) 7)"                                                                                                                                                                                                                                    47ms » ✓
array(2) {
  ["type"]=>
  string(9) "operation"
  ["value"]=>
  array(3) {
    ["op"]=>
    string(1) "+"
    ["a"]=>
    array(2) {
      ["type"]=>
      string(9) "operation"
      ["value"]=>
      array(3) {
        ["op"]=>
        string(1) "+"
        ["a"]=>
        array(2) {
          ["type"]=>
          string(9) "operation"
          ["value"]=>
          array(3) {
            ["op"]=>
            string(1) "*"
            ["a"]=>
            array(2) {
              ["type"]=>
              string(6) "number"
              ["value"]=>
              string(1) "1"
            }
            ["b"]=>
            array(2) {
              ["type"]=>
              string(6) "number"
              ["value"]=>
              string(4) "1000"
            }
          }
        }
        ["b"]=>
        array(2) {
          ["type"]=>
          string(9) "operation"
          ["value"]=>
          array(3) {
            ["op"]=>
            string(1) "*"
            ["a"]=>
            array(2) {
              ["type"]=>
              string(6) "number"
              ["value"]=>
              string(2) "33"
            }
            ["b"]=>
            array(2) {
              ["type"]=>
              string(6) "number"
              ["value"]=>
              string(2) "10"
            }
          }
        }
      }
    }
    ["b"]=>
    array(2) {
      ["type"]=>
      string(6) "number"
      ["value"]=>
      string(1) "7"
    }
  }
}
float(1337)