Создание парсера

Discussion in 'PHP' started by Trieg, 28 May 2008.

  1. Trieg

    Trieg Elder - Старейшина

    Joined:
    26 Oct 2007
    Messages:
    82
    Likes Received:
    9
    Reputations:
    0
    Необходимо создать парсер на пхп под достаточно редкий формат файла.. есть немного инфы о формате..
    PHP:
    DWORD mesh_count
    :FOREACH( mesh_count )
      
    ZSTR path
    :ENDFOR
     
    DWORD material_count
    :FOREACH( material_count )
      
    ZSTR path
      WORD rotation
      WORD alpha_enabled
      WORD two_sided
      WORD alpha_test_enabled
      WORD alpha_ref_enabled
      WORD z_write_enabled
      WORD z_test_enabled
      WORD blending_mode
      WORD specular_enabled
      FLOAT alpha
      WORD glow_type
      FLOAT red
      FLOAT green
      FLOAT blue
    :ENDFOR
     
    DWORD effect_count
    :FOREACH( effect_count )
      
    ZSTR path
    :ENDFOR
     
    DWORD object_count
    :FOREACH( object_count )
      
    DWORD unk1
      DWORD unk2
      DWORD unk3
      DWORD mesh_count
      
    :IF( mesh_count )
        :FOREACH( 
    mesh_count )
          
    DWORD mesh_id
          DWORD material_id
          
    :WHILE( true )
            
    BYTE flag_id
            
    :IF( flag_id == ) BREAK //Leave the WHILE(true) loop
            
    BYTE flag_size
            BYTE
    [flag_sizedata
          
    :WEND
        
    :ENDFOR
        
        
    WORD object2_count
        
    :FOREACH( object2_count )
          
    DWORD mesh_id
          DWORD material_id
          
    :WHILE( true )
            
    BYTE flag_id
            
    :IF( flag_id == ) BREAK //Leave the WHILE(true) loop
            
    BYTE flag_size
            BYTE
    [flag_sizedata
          
    :WEND
        
    :ENDFOR
        
        
    //These are for Bounding Box
        
    FLOAT minX
        FLOAT minY
        FLOAT minZ
        FLOAT maxX
        FLOAT maxY
        FLOAT maxZ
      
    :ENDIF
    :ENDFOR
    возможно есть ошибки.. это сейчас не критично.

    когда начал писать парсер столкнулся с проблемой..
    как можно реализовать на пхп ZSTR?

    с DWORD и WORD проблем у меня не возникло..
    PHP:
      function getWord($file) {
        
    $ret unpack("S"fread($file2));
        return 
    $ret[1];
      }

      function 
    getDword($file) {
        
    $ret unpack("L"fread($file4));
        return 
    $ret[1];
      }
    а вот как сделать ZSTR (читать строку до пустого байта)

    PS:ранее мне не когда не приходилось сталкиваться с подобной работой.. по этому опыта мало,вот и прошу помощи =)