在php中读取类似lua的代码

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在php中读取类似lua的代码脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题……
我有这样的代码,我想用 PHP阅读它.

NamE
 {
    tITle
    (
        A_STRING
    );

    settings
    {
        SetA( 15,15 );
        SetB( "test" );
    }

    desc
    {
        Desc
        (
            A_STRING
        );

        Cond
        (
            A_STRING
        );  

    }
 }

我想要:

$arr['NAME']['title'] = "A_STRING";
$arr['NAME']['settings']['SetA'] = "15,15";
$arr['NAME']['settings']['SetB'] = "test";
$arr['NAME']['desc']['Desc'] = "A_STRING";
$arr['NAME']['desc']['Cond'] = "A_STRING";

我不知道应该如何开始:/.变量并不总是相同的.
有人能给我一个关于如何解析这样一个文件提示吗?

谢谢

解决方法

如果文件简单,那么滚动你自己的本地解析器可能会容易得多.无论如何,最终你最终会用词法分析器编写正则表达式.这是一个快速的黑客示例:( in.txt应包含您在上面提供的输入.)

<PRe>
<?PHP

$input_str = file_get_contents("in.txt");
print_r(parse_lualike($input_str));

function parse_lualike($str){    
    $str = preg_replace('/[\n]|[;]/','',$str);
    preg_match_all('/[a-zA-Z][a-zA-Z0-9_]*|[(]\s*([^)]*)\s*[)]|[{]|[}]/',$str,$matches);
    $tree = array();
    $stack = array();
    $pos = 0;
    $stack[$pos] = &amp;$tree;
    foreach($matches[0] as $index => $token){
        if($token == '{'){
            $node = &$stack[$pos];
            $node[$ident] = array();
            $pos++;
            $stack[$pos] =  &$node[$ident];
        }elseif($token=='}'){
            unset($stack[$pos]);
            $pos--;
        }elseif($token[0] == '('){
            $stack[$pos][$ident] = $matches[1][$index];
        }else{
            $ident =  $token;
        }
    }
    return $tree;
}

?>

快速解释:第一个preg_replace删除所有换行符和分号,因为它们似乎是多余的.下一部分将输入字符串分成不同的“标记”;名称,括号和之间的关系. print_r $匹配;那里看看它做了什么.

然后只有一个真正的hackish状态机(或读取for循环)通过令牌并将它们添加到树中.它还有一个堆栈,可以构建嵌套树.

请注意,此算法未经过测试.当呈现“现实生活”输入时,它可能会破裂.例如,值内的括号将导致麻烦.另请注意,它不会删除字符串中的引号.我会把这一切留给别人……

但是,正如你所要求的那样,这是一个开始:)

干杯!

PS.为方便起见,这是上面代码输出

Array
(
    [NAME] => Array
        (
            [title] => A_STRING   
            [settings] => Array
                (
                    [SetA] => 15,15 
                    [SetB] => "test" 
                )

            [desc] => Array
                (
                    [Desc] => A_STRING       
                    [Cond] => A_STRING       
                )

        )

)

脚本宝典总结

以上是脚本宝典为你收集整理的在php中读取类似lua的代码全部内容,希望文章能够帮你解决在php中读取类似lua的代码所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。