我正在构建模板解析器。
模板解析器的工作方式如下:
解析器助手是具有以下结构的类:
Offset代表令牌偏移量(因此offset = 0表示要解析的第一个令牌等)
我的解析器帮助程序规则具有以下结构:
对于人们来说,如何知道无上下文语法是什么:
规则 - > < option1> | < option2> | ...... | < optionN>
带有optionX的是labda(空选项)或列表:
所以函数parseRecursive调用tryOption,tryOption调用tryItem,tryItem可以调用parseRecursive agian。
错误在函数tryItem:
中...
// Try item
if($item->getType()==vdParserHelperRuleOptionItem::RuleLink){
///// The next line !!!!!!!!!!!!!
if(!$this->parseRecursive($currentOffset, $item->getData())){
///// The previous line !!!!!!!!!
return $item->isOptional();
}
}else if($item->getType()==vdParserHelperRuleOptionItem::Type){
...
}
...
当我删除(替换为if(true){或者替换它''''注释之间的行时,执行php代码。但是,当我不删除该行时,php不执行我的代码并输出任何内容,我根本没有得到任何错误。当我查看apache日志文件时,我收到此错误:
[notice] child pid 11957 exit signal Segmentation fault (11)
这是php中的错误,还是php无法处理直接递归?还是别的什么?
答案 0 :(得分:0)
我确信这是对你的代码清理过程中的疏忽,但是你有一个额外的{没有关闭。