Yacc 为什么它需要莱克斯的规则?

Yacc 为什么它需要莱克斯的规则?,yacc,lex,Yacc,Lex,比如,在我看来,只有声明就足够了 有人能解释为什么词汇分析中需要规则吗 在我看来,它们只在.y文件中是必需的 根据规则我所说的块是: rdels { if ($this->smarty->auto_literal) { $this->token = Smarty_Internal_Templateparser::TP_OTHER; } else { $this->token = Smarty_Internal_Templateparser::T

比如,在我看来,只有声明就足够了

有人能解释为什么词汇分析中需要规则吗

在我看来,它们只在
.y
文件中是必需的

根据规则我所说的块是:

rdels {
  if ($this->smarty->auto_literal) {
     $this->token = Smarty_Internal_Templateparser::TP_OTHER;
  } else {
     $this->token = Smarty_Internal_Templateparser::TP_RDEL;
     $this->yypopstate();
  }
}

当输入到
yypostate
yypushtate

时,可以输入状态,此时字符输入可能有歧义

如果lexer遇到一个
(引号),您可能会进入一个名为“string”的状态(
yypushtate
),在该状态下,任何具有特殊含义的后续字符(即
+
-
等)都被视为字符串的一部分。“string”状态完成(
yypostate
)当lexer遇到另一个


在flex中,这些状态被称为。

如果lex analysis也有状态,那么与语法分析有什么不同?词汇状态只用于区分输入,而不是定义语法。例如,它们不能减少。