在php中阅读类似lua的代码
我有个问题。。。 我有这样的代码,我想用PHP阅读在php中阅读类似lua的代码,php,parsing,Php,Parsing,我有个问题。。。 我有这样的代码,我想用PHP阅读 NAME { title ( A_STRING ); settings { SetA( 15, 15 ); SetB( "test" ); } desc { Desc ( A_STRING ); Cond (
NAME
{
title
(
A_STRING
);
settings
{
SetA( 15, 15 );
SetB( "test" );
}
desc
{
Desc
(
A_STRING
);
Cond
(
A_STRING
);
}
}
<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] = &$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;
}
?>
我想:
$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";
我不知道该怎么开始:/。变量并不总是相同的。
有人能告诉我如何解析这样的文件吗
Thx这看起来像一个真正的语法-您应该使用解析器生成器。你应该开始了
php:a已经有了一些选项,这是一个。这不是答案,而是建议: 也许您可以修改您的输入代码以与具有类似语法的JSON兼容。JSON解析器和生成器可用于PHP
如果文件这么简单,那么使用自己的解析器可能会容易得多。无论如何,你最终还是会用lexers编写正则表达式。下面是一个快速的黑客示例:(in.txt应该包含上面提供的输入。)
因为语法看起来并不复杂,一个手工编写的递归下降解析器也就足够了。这可以避免使用语法分析器生成器。嗯——也许吧——但我认为每个“程序员”都应该至少用一次生成器弄脏自己的手。谢谢!这真的很有帮助。现在我有了一个可以编写代码的基础:)。
Array
(
[NAME] => Array
(
[title] => A_STRING
[settings] => Array
(
[SetA] => 15, 15
[SetB] => "test"
)
[desc] => Array
(
[Desc] => A_STRING
[Cond] => A_STRING
)
)
)