コード例 #1
0
ファイル: ToClassVisitorSpec.php プロジェクト: scato/phpeg
    function it_should_create_an_extended_grammar_from_a_node()
    {
        $grammarNode = new GrammarNode('FooFile', array(new RuleNode('Foo', '"Foo"', new RuleReferenceNode('Bar'))));
        $grammarNode->setNamespace('Acme\\Factory');
        $grammarNode->setImports(array('Acme\\FactoryInterface', 'Acme\\BaseFile'));
        $grammarNode->setBase('BaseFile');
        $grammarCode = <<<EOS
namespace Acme\\Factory;

use Acme\\FactoryInterface;
use Acme\\BaseFile;

class FooFile extends BaseFile
{
    protected function parseFoo()
    {
        \$_position = \$this->position;

        if (isset(\$this->cache['Foo'][\$_position])) {
            \$_success = \$this->cache['Foo'][\$_position]['success'];
            \$this->position = \$this->cache['Foo'][\$_position]['position'];
            \$this->value = \$this->cache['Foo'][\$_position]['value'];

            return \$_success;
        }

        \$_success = \$this->parseBar();

        \$this->cache['Foo'][\$_position] = array(
            'success' => \$_success,
            'position' => \$this->position,
            'value' => \$this->value
        );

        if (!\$_success) {
            \$this->report(\$_position, "Foo");
        }

        return \$_success;
    }
}
EOS;
        $grammarNode->accept($this->getWrappedObject());
        $this->getResult()->shouldBe($grammarCode);
    }
コード例 #2
0
ファイル: ParserGenerator.php プロジェクト: scato/phpeg
 private function createClassFromTree(GrammarNode $tree)
 {
     $visitor = new ToClassVisitor();
     $tree->accept($visitor);
     return $visitor->getResult();
 }