2011-01-14 6 views
0

Wie this file ist meiner Meinung nach nur Deklaration genug.Warum benötigt es Regeln in Lex?

Kann jemand erklären, warum Regeln in der lexikalischen Analyse notwendig sind?

Meiner Meinung nach sind sie nur in .y Dateien notwendig ...

von Regel Ich spreche über Blöcke wie:

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

Wann yypopstate und yypushstate?

Antwort

0

Sie geben states ein, wenn die Zeicheneingabe mehrdeutige Bedeutungen haben kann.

Wenn die Lexer ein " (Zitat) begegnen, könnte man einen Zustand (yypushstate) genannt „string“, in denen gibt Sie ein folgendes Zeichen, die sonst eine besondere Bedeutung haben würden (dh +, -, etc.) in Betracht gezogen wird Teil der Zeichenfolge. Der "string" -Zustand ist beendet (yypopstate), wenn der Lexer auf einen anderen " trifft.

Im Flex werden diese Zustände start conditions genannt.

+0

Wenn die Lex-Analyse auch Zustände hat, was unterscheidet sich dann von der Grammatikanalyse? – java

+0

Die lexikalischen Zustände dienen nur dem Zweck, Eingaben zu unterscheiden, nicht Grammatik zu definieren. Sie können zum Beispiel nicht reduziert werden. –