Example #1
0
function parseNamedArgValue($ast)
{
    assert_ast_type($ast, [NodeType::LITERAL, NodeType::IDENTIFIER, NodeType::NAMED_ARGS, NodeType::TYPEOF, NodeType::DT, NodeType::GLA, NodeType::GF, NodeType::GT, NodeType::GIST, NodeType::GI, NodeType::NUL, NodeType::FUNCTOR, NodeType::ATTRIBUTE]);
    $source = ast_node_source($ast);
    switch (ast_node_type($ast)) {
        case NodeType::LITERAL:
            return parseLiteralTemplate($ast);
            break;
        case NodeType::IDENTIFIER:
            return new Identifier(parseIdentifier($ast));
            break;
        case NodeType::DT:
        case NodeType::TYPEOF:
            return parseType($ast);
            break;
        case NodeType::ATTRIBUTE:
            return parseAttribute($ast);
            break;
        case NodeType::NAMED_ARGS:
            return parseNamedArgList($ast);
            break;
        case NodeType::FUNCTOR:
            return parseFunctor($ast);
            break;
        case NodeType::GLA:
            return parseGLA($ast);
            break;
        case NodeType::GF:
            return parseGF($ast);
            break;
        case NodeType::GT:
            return parseGT($ast);
            break;
        case NodeType::GIST:
            return parseGIST($ast);
            break;
        case NodeType::GI:
            return parseGI($ast);
            break;
        case NodeType::NUL:
            return null;
            break;
    }
}
Example #2
0
 function parseGISTWP($ast, $name, $header)
 {
     // Push LibraryManager so we can undo this waypoint's definitions.
     ob_start();
     LibraryManager::Push();
     /***************   PROCESS AST   ***************/
     $attMap = ast_get($ast, NodeKey::ATT_MAP);
     $payload = ast_get($ast, NodeKey::PAYLOAD);
     $queries = [];
     // Info to return
     $res = new GenerationInfo();
     foreach ($payload as $query => $qInfo) {
         $gistSpec = parseGIST(ast_get($qInfo, NodeKey::TYPE));
         $output = parseAttributeList(ast_get($qInfo, NodeKey::VALUE));
         $cargs = parseJsonAst(ast_get($qInfo, NodeKey::CARGS));
         $sargs = parseStateList(ast_get($qInfo, NodeKey::SARGS), $query);
         $retState = ast_get($qInfo, NodeKey::STATE);
         $reqStates = [];
         foreach ($sargs as $val) {
             $reqStates[$val->name()] = $val->type();
         }
         $gist = $gistSpec->apply(extractTypes($output), $reqStates);
         //fwrite(STDERR, "GIST outputs: " . print_r($gist->output()) . PHP_EOL);
         correlateAttributes($output, $gist->output());
         $info = ['gist' => $gist, 'output' => $output, 'cargs' => $cargs, 'states' => $sargs, 'retState' => $retState];
         $queries[$query] = $info;
         $res->addJob($query, $name);
         $res->absorbAttrList($output);
         $res->absorbStateList($sargs);
         $res->absorbInfo($gist);
         StateRegistry::addState($name, $query, $gist);
     }
     /*************** END PROCESS AST ***************/
     // Get this waypoint's headers
     $myHeaders = $header . PHP_EOL . ob_get_clean();
     // Only one file at the moment
     $filename = $name . '.cc';
     $res->addFile($filename, $name);
     _startFile($filename);
     GISTGenerate($name, $queries, $attMap);
     _endFile($filename, $myHeaders);
     // Pop LibraryManager again to get rid of this waypoint's declarations
     LibraryManager::Pop();
     return $res;
 }