ClassAst.php
<?php
namespace Tlf\Lexer\Ast;
class ClassAst extends \Tlf\Lexer\Ast {
public function getTree($sourceTree = null){
$val = $this->get('value') ?? [];
foreach ($val as $i=>$v){
if (is_object($v)){
$val[$i] = $v->getTree();
}
}
return $val;
}
public function getCode(string $language): string{
//var_dump($this);
//exit;
$code = '';
switch($language){
case 'php':
$code = $this->get_php_code();
break;
case 'javascript':
$code = $this->get_javascript_code();
break;
default:
throw new \Exception("Language '$language' is not valid");
}
return $code;
}
public function get_php_code(): string {
$t = (object)$this->_tree;
$class_definition = "";
if (!empty($t->namespace))$class_definition .= "\nnamespace {$t->namespace}";
//var_dump($t);
//var_dump($this->_tree);
$class_definition .= "\nclass {$t->name} extends {$t->extends} {";
foreach ($t->properties as $property){
$p = new PropertyAst($property['type'],$property);
$class_definition .= "\n".$p->get_php_code();
}
$class_definition .= "\n\n}";
return $class_definition;
}
public function get_javascript_code(): string {
$t = (object)$this->_tree;
$class_definition = "";
if (!empty($t->namespace))$class_definition .= "\n// ERROR, TODO: Cannot convert namespace '{$t->namespace}' to javascript.";
$class_definition .= "\nclass {$t->name}";
if (isset($t->extends))$class_definition .= " extends {$t->extends}";
$class_definition .= " {\n";
foreach ($t->properties as $property){
$p = new PropertyAst($property['type'],$property);
$class_definition .= "\n".$p->get_javascript_code();
}
$class_definition .= "\n\n}";
return $class_definition;
}
}