2011-01-20 5 views
3
function yy_r9_1($yy_subpatterns) 
    { 

    $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE; 
    $this->yypopstate(); 
    } 

위의 내용은 PHP에서 smarty의 렉서 (lexer)에서 온 것입니다. 누구든지 yy_r9_1이 의미하는 것을 알고 있습니까?렉서의 명명 규칙은 무엇입니까?

답변

1

yy은 충돌을 피하기 위해 YACC의 접두사입니다. 당시 YACC가 만들어 졌던 시대에는 구조체가 아닌 네임 스페이스 나 클래스가 없었습니다. 사실 YACC는 처음에 C의 전신 인 B로 작성되었습니다.

r9은 아마도 규칙 번호 9를 나타내고 1은 여러 기능을 처리해야하는 규칙의 증분 접두사 일 수 있습니다.

그러나 내가 잘못되어이 문자열이 다른 것을 의미하더라도이 정보를 사용할 수 있을지는 의문입니다. 이것은 렉서와 파서의 내부에 대한 깊은 이해를 필요로하며 마지막으로는 문법 규칙의 마지막이 될 것입니다. 문법을 이해한다면 서브 루틴을 사용하거나 조작하는 대신에 렉서를 변경하고 다시 생성 할 수 있습니다.

관련 문제