public
Created

How to create new programming language in PHP?

  • Download Gist
new-lang-code-file.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// This is written in pseudo language
 
class Foo {
def bar() {
ret "DziaƂa!";
}
}
 
$f = Foo.new();
print $f.bar();
 
$realTrue = true;
 
if($realTrue)
print "Real True!";
 
unless($realTrue != false)
print "unlessss....";
new-lang-parser.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
<?php
 
class NewLangParser {
private $_handler;
private $_path;
public function stream_open($path, $mode, $options, &$opened_path) {
 
stream_wrapper_restore('file');
$this->_handler = fopen($path, $mode);
$this->_path = $path;
self::registerLang();
return true;
}
public function stream_read($count) {
 
$content = fread($this->_handler, $count);
$content = $this->_parseCode($content);
if ($content)
return "<?php\n".$content;
return "";
}
private function _parseCode($content) {
$content = str_replace('def ', 'public function ', $content);
$content = str_replace('ret ', 'return ', $content);
$content = str_replace('print ', 'echo ', $content);
$content = preg_replace('/(\w+).new\((.*)\)/', 'new \\1(\\2)', $content);
$content = str_replace('.', '->', $content);
$content = preg_replace('/unless\s*\((.*)\)/', 'if(!(\\1))', $content);
return $content;
}
public function stream_eof() {
 
return true;
}
public function stream_stat() {
 
return fstat($this->_handler);
}
public function url_stat() {
 
return stat($this->_path);
}
public static function registerLang() {
stream_wrapper_unregister('file');
stream_wrapper_register('file', 'NewLangParser');
}
}
 
NewLangParser::registerLang();
 
include 'new-lang-code-file.php';

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.