Exemplo n.º 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;
    }
}
Exemplo n.º 2
0
 function parseGTWP($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);
     $passthrough = parseQueryToAttributeSet(ast_get($ast, NodeKey::PASSTHROUGH));
     $queries = [];
     // Info to return
     $res = new GenerationInfo();
     foreach ($payload as $query => $qInfo) {
         $gtSpec = parseGT(ast_get($qInfo, NodeKey::TYPE));
         $exprs = parseNamedExpressionList(ast_get($qInfo, NodeKey::ARGS));
         $output = parseAttributeList(ast_get($qInfo, NodeKey::VALUE));
         $cargs = parseJsonAst(ast_get($qInfo, NodeKey::CARGS));
         $sargs = parseStateList(ast_get($qInfo, NodeKey::SARGS), $query);
         // Set of attributes to be copied to the output for each tuple
         $pass = $passthrough[$query];
         $reqStates = [];
         foreach ($sargs as $val) {
             $reqStates[$val->name()] = $val->type();
         }
         $gt = $gtSpec->apply($exprs, extractTypes($output), $reqStates);
         correlateAttributes($output, $gt->output());
         $info = ['gt' => $gt, 'expressions' => $exprs, 'output' => $output, 'cargs' => $cargs, 'states' => $sargs, 'pass' => $pass];
         $queries[$query] = $info;
         $res->addJob($query, $name);
         $res->absorbInfoList($exprs);
         $res->absorbAttrList($pass);
         $res->absorbAttrList($output);
         $res->absorbStateList($sargs);
         $res->absorbInfo($gt);
     }
     /*************** 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);
     GTGenerate($name, $queries, $attMap);
     _endFile($filename, $myHeaders);
     // Pop LibraryManager again to get rid of this waypoint's declarations
     LibraryManager::Pop();
     return $res;
 }