Zanurkuj w Pythonie/Źródła/kgp/kgp.py: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Piotr (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
<source lang='python'>
#-*- coding: utf-8
#!/usr/bin/env python2
 
u"""Generator Kanta dla Pythona
 
Generuje pseudofilozofię opartą na gramatyce bezkontekstowej
Linia 43 ⟶ 44:
 
class KantGenerator(object):
u"""generuje pseudofilozofię opartą na gramatyce bezkontekstowej"""
def __init__(self, grammar, source=None):
Linia 51 ⟶ 52:
 
def _load(self, source):
u"""wczytuje XML-owe źródłow wejścia, zwraca sparsowany dokument XML
 
- adres URL z plikiem XML ("http://diveintopython.org/kant.xml")
Linia 64 ⟶ 65:
 
def loadGrammar(self, grammar):
u"""wczytuje gramatykę bezkontekstową"""
self.grammar = self._load(grammar)
self.refs = {}
Linia 71 ⟶ 72:
def loadSource(self, source):
u"""wczytuje źródło source"""
self.source = self._load(source)
 
def getDefaultSource(self):
u"""zgaduje domyślne źródło bieżącej gramatyki
Domyślnym źródłem będzie jeden z <ref>-ów, do którego nic się
Linia 95 ⟶ 96:
def reset(self):
u"""resetuje parser"""
self.pieces = []
self.capitalizeNextWord = 0
 
def refresh(self):
u"""resetuje bufor wyjściowy, ponownie parsuje cały plik źródłowy i zwraca wyjście
Ponieważ parsowanie dosyć dużo korzysta z przypadkowości, jest to
Linia 111 ⟶ 112:
 
def output(self):
u"""wyjściowy, wygenerowany tekst"""
return "".join(self.pieces)
 
def randomChildElement(self, node):
u"""wybiera przypadkowy potomek węzła
Jest to użyteczna funkcja wykorzystywana w do_xref i do_choice.
Linia 129 ⟶ 130:
 
def parse(self, node):
u"""parsuje pojedynczy węzeł XML
Parsowany dokument XML (from minidom.parse) jest drzewem węzłów
Linia 143 ⟶ 144:
 
def parse_Document(self, node):
u"""parsuje węzeł dokumentu
Węzeł dokument sam w sobie nie jest interesujący (przynajmnie dla nas), ale
Linia 152 ⟶ 153:
 
def parse_Text(self, node):
u"""parsuje węzeł tekstowy
Tekst węzła tekstowego jest zazwyczaj dodawany bez zmiany do wyjściowego bufora.
Linia 168 ⟶ 169:
 
def parse_Element(self, node):
u"""parsuje element
XML-owy element odpowiada bieżącemu znacznikowi źródła:
Linia 181 ⟶ 182:
 
def parse_Comment(self, node):
u"""parsuje komentarz
Gramatyka może zawierać komentarze XML, ale my je pominiemy
Linia 188 ⟶ 189:
def do_xref(self, node):
u"""obsługuje znacznik <xref id='...'>
Znacznik <xref id='...'> jest odwołaniem do znacznika <ref id='...'>.
Linia 198 ⟶ 199:
 
def do_p(self, node):
u"""obsługuje znacznik <p>
Znacznik <p> jest jądrem gramatyki. Może zawierać niemal
Linia 220 ⟶ 221:
 
def do_choice(self, node):
u"""obsługuje znacznik <choice>
Znacznik <choice> zawiera jeden lub więcej znaczników <p>. Jeden znacznik <p>