Что такое соглашение об именовании лексера? - PullRequest
3 голосов
/ 20 января 2011
    function yy_r9_1($yy_subpatterns)
    {

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

Выше приведен лексер умного в PHP, кто-нибудь знает, что означает yy_r9_1?

1 Ответ

1 голос
/ 20 января 2011

yy - это префикс YACC, чтобы избежать коллизий. В те времена, когда был построен YACC, не было ни пространства имен, ни классов, даже структур. На самом деле YACC изначально был написан на B, предшественнике C.

r9, вероятно, обозначает правило № 9, а 1 может быть инкрементным префиксом для правил, требующих обработки нескольких функций.

Однако, даже если я ошибаюсь и эти строки означают что-то другое, я сомневаюсь, что вы сможете использовать эту информацию любым способом. Это потребовало бы глубокого понимания внутренностей лексера и парсера и, наконец, что не менее важно, грамматических правил. Если вы понимаете грамматику, вы также можете изменить ее и сгенерировать лексер вместо того, чтобы использовать или даже манипулировать его подпрограммами.

...