2013-08-21 3 views
0

У меня есть файл, полученный из скрипта TCL, который имеет массив синтаксиса TCL, как показано ниже.tcl array to ruby ​​hash parser

set data(item1) { 
    xyz { 
    a { one two three 1 2 3} 
    b { three one two 3 2 4} 
    } 
    lmn { 
    z { "something" 1 2 3} 
    d { "samething" 3 2 4} 
    } 
}; 

set data(item2) { 
    xyz { 
    ss { 100 } 
    sd { "sdss" 200 300} 
    } 
    lmn { 
    ee { "xdf" 1 "2dsd" 3} 
    pp { "dd" "fsdf" 3 2 4} 
    } 
}; 

Теперь мне нужно прочитать этот файл в программе Ruby, и построить их в хэш хэшей, похожий на что-то ниже, прежде чем начать потреблять необходимые данные:

data = { 
    'item1' => { 
    'xyz' => { 
     'a' => %w{one two three 1 2 3}, 
     'b' => %w{three one two 3 2 4} 
    }, 

    'lmn' => { 
     'z' => %w{something 1 2 3}, 
     'd' => %w{samething 3 2 4} 
    } 
    }, 

    'item2' => { 
    'xyz' => { 
     'ss' => %w{100 }, 
     'sd' => %w{sdss 200 300} 
    }, 
    'lmn' => { 
     'ee' => %w{xdf 1 2dsd 3}, 
     'pp' => %w{dd fsdf 3 2 4} 
    } 
    } 
} 

Есть ли Ruby-утилита или метод, который я могу использовать для этой цели?

Заранее благодарим за поддержку.

ответ

0

Нет. Вам нужно будет построить парсер. Взгляните на treetop.

Это поможет много узнать о начальных базовых знаниях compilers, таких как фазы компиляции (лексический анализатор и анализатор синтаксиса, для этого проекта вам не нужен семантический анализатор).

Кроме того, некоторое базовое понимание grammars поможет, поскольку это необходимо для компиляторов - но, скорее всего, вы наткнетесь на грамматику, пытаясь выяснить компиляторы.