phpython Code
a python interpreter written in php
Status: Pre-Alpha
Brought to you by:
francescobianco
--- a +++ b/trunk/python/old/python.lib.php @@ -0,0 +1,114 @@ +<?php + +$_PYTHON = array( + "DEBUG" => array( + "DUMP_TOKEN" => true + ), + "PARSER" => null, +); + +function python_start() { + global $_PYTHON; + + require_once("lime/parse_engine.php"); + require_once("python.class"); + require_once("python-tokenizer.php"); + require_once("python-interface.php"); + + $_PYTHON["PARSER"] = new parse_engine(new python()); +} + +function python_eval($pycode) { + global $_PYTHON; + + $parser = &$_PYTHON["PARSER"]; + $codeln = 1; + + if (!strlen($pycode)) return; + try { + $parser-> reset(); + $tokens = python_tokenize($pycode); + + //var_dump($tokens); + if ($_PYTHON["DEBUG"]["DUMP_TOKEN"]) { + foreach($tokens as $token) { + python_dump_token($token); + } + echo '<hr/>'; + } + + $alltok = count($tokens); + $cursor = 0; + + while($cursor < $alltok) { + $token0 = $tokens[$cursor]; + $token1 = isset($tokens[$cursor+1]); + $parser-> eat($token0["name"], $token0["value"]); + if ($_PYTHON["DEBUG"]["DUMP_TOKEN"]) {python_dump_token($token0);} + if ($token0["name"] == "NEWLINE") { + $codeln++; + } + $cursor++; + } + + $parser->eat_eof(); + + } catch (parse_error $e) { + echo '<pre>'; + echo $e->getMessage(), "\nLine: $codeln;", "\n"; + echo '</pre>'; + } + +} + +function python_file($filename) { + $code = file_get_contents($filename); + python_eval($code); +} + +function python_exec($filename) { + $code = file_get_contents($filename); + #echo '<pre>'; + #echo htmlentities($code); + #echo '</pre>'; + python_eval($code); +} + +function python_build() { + require_once("lime/lime.php"); + $code = parse_lime_grammar(dirname(__FILE__)."/python.lime"); + file_put_contents(dirname(__FILE__)."/python.class","<?php \n".$code."\n?>"); +} + +function python_sanitize($code) { + return $code; +} + + + +function python_token($name,$value=null,$len=1) { + return array( + "name" => $name, + "value" => $value, + "len" => $len + ); +} + +function python_parse_comment($comment) { + global $_PYTHON; + + if (re("/^#\{([a-zA-Z_][a-zA-Z0-9_]*)\}:(.*)/",$comment,$r)){ + $_PYTHON["DEBUG"][$r[1]] = trim($r[2]); + #var_dump($_PYTHON["DEBUG"]); + } +} + +function python_dump_token($token) { + echo '<span style="margin:0 2px 2px 0;display:inline-block;padding:0px 4px;font-family:arial;font-size:10px;background:yellow;color:#323232;border:1px solid #323232;">'; + if (is_object($token["value"])) { + echo $token["name"].'('.strip_tags($token["value"]->name).')'; + } else { + echo $token["name"].'('.strip_tags($token["value"]).')'; + } + echo '</span>'; +}