-
-
Save nikhgupta/2009577 to your computer and use it in GitHub Desktop.
How to create new programming language in PHP?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is written in pseudo language | |
class Foo { | |
def bar() { | |
ret "it Works!"; | |
} | |
} | |
$f = Foo.new(); | |
print $f.bar(); | |
$realTrue = true; | |
if($realTrue) | |
print "Real True!"; | |
unless($realTrue != false) | |
print "unlessss"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment