<?php
require_once __DIR__.'/python.tokenize.php';
class lang_python_eval extends lang_python_tokenize {
public static function python_eval($code,$file) {
$p = static::getParser();
$l = 0;
if (!strlen($code)) return;
try {
$t = static::python_tokenize($code);
$a = count($t);
$p->reset();
$c = 0;
while ($c < $a) {
$k = $t[$c];
$p-> eat($k->name,$k->value);
$c++;
}
$p->eat_eof();
} catch (Exception $e) {
echo '<pre style="padding:8px;background:f2f2f2;">';
echo ' File "'.$file.'", line '.$k->row."\n";
echo ' '.static::get_code_line($code,$k->row)."\n";
echo ' '.'^'."\n";
switch($k->name) {
//case "NAME": echo "NameError: name '{$k->value->name}' is not defined";break;
case "INDENT": echo 'IndentationError: unexpected indent';break;
default: echo 'SyntaxError: invalid syntax';break;
}
var_dump($e);
echo '</pre>';
}
}
public static function get_code_line($code,$row) {
$code = explode("\n",$code);
return trim($code[$row-1]);
}
}