<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=DCG_nyelvtanok%2C_haszn%C3%A1latuk_elemz%C3%A9sre</id>
	<title>DCG nyelvtanok, használatuk elemzésre - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=DCG_nyelvtanok%2C_haszn%C3%A1latuk_elemz%C3%A9sre"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=DCG_nyelvtanok,_haszn%C3%A1latuk_elemz%C3%A9sre&amp;action=history"/>
	<updated>2026-05-17T02:11:43Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=DCG_nyelvtanok,_haszn%C3%A1latuk_elemz%C3%A9sre&amp;diff=137916&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm29}}   * fejezetek: 4.12.1, 4.12.2  ==A DCG elemzés ==   Bináris számok nyelvtana:  &lt;pre&gt; &amp;lt;szám&gt;		  ::= &amp;lt;jegy&gt; &amp;lt;számmar…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=DCG_nyelvtanok,_haszn%C3%A1latuk_elemz%C3%A9sre&amp;diff=137916&amp;oldid=prev"/>
		<updated>2012-10-21T20:09:40Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm29}}   * fejezetek: 4.12.1, 4.12.2  ==A DCG elemzés ==   Bináris számok nyelvtana:  &amp;lt;pre&amp;gt; &amp;lt;szám&amp;gt;		  ::= &amp;lt;jegy&amp;gt; &amp;lt;számmar…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|PrologElm29}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* fejezetek: 4.12.1, 4.12.2&lt;br /&gt;
&lt;br /&gt;
==A DCG elemzés ==&lt;br /&gt;
 &lt;br /&gt;
Bináris számok nyelvtana:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;szám&amp;gt;		  ::= &amp;amp;lt;jegy&amp;gt; &amp;amp;lt;számmaradék&amp;gt;&lt;br /&gt;
&amp;amp;lt;számmaradék&amp;gt; ::= &amp;amp;lt;jegy&amp;gt; &amp;amp;lt;számmaradék&amp;gt; | &amp;amp;epsilon;&lt;br /&gt;
&amp;amp;lt;számjegy&amp;gt;	 ::= 0 | 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ugyanez Prolog DCG szintaxissal (nem szabványos, de a legtöbb Prolog rendszer támogatja)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
szám		  --&amp;gt; számjegy, számmaradék.&lt;br /&gt;
számmaradék --&amp;gt; számjegy, számmaradék | &amp;quot;&amp;quot;.&lt;br /&gt;
számjegy	 --&amp;gt; &amp;quot;0&amp;quot; | &amp;quot;1&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A paraméter nélküli nemterminálisoknak egy kétargumentumú Prolog eljárás felel meg.&lt;br /&gt;
&lt;br /&gt;
Az eljárás első argumentuma egy karakterkód lista lesz, és azt várjuk tőle, hogy sikerüljön, ha ennek a listának egy kezdőszelete kielemezhető az adott nemterminálisnak megfelelő szabályok szerint; egyébként hiúsuljon meg. &lt;br /&gt;
&lt;br /&gt;
Siker esetén elvárjuk, hogy a második argumentumban adja vissza a bemenő listának a kielemzett kódsorozat elhagyásával keletkező zárószeletét. Ekkor úgy mondjuk, hogy a bemenő listáról leemelhető az adott nemterminális és marad a kimenő lista. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
szám(L0, L)		  :- jegy(L0, L1), számmaradék(L1, L).&lt;br /&gt;
számmaradék(L0, L) :- ( jegy(L0, L1), számmaradék(L1, L)&lt;br /&gt;
							 ; L=L0 ).&lt;br /&gt;
számjegy(L0, L)	 :- ( &amp;#039;C&amp;#039;(L0, 48, L)&lt;br /&gt;
							 ; &amp;#039;C&amp;#039;(L0, 49, L) ).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az akkumulátorpárok láncolását rábízzuk a Prolog fordítóprogramra. A definit klóz nyelvtani szabályokat a Prolog rendszer a program beolvasása során Prolog szabályokká alakítja. A &amp;#039;C&amp;#039; eljárás az alapértelmezett akkumulálási lépést végzi. &amp;#039;C&amp;#039;(L0, Char, L) jelentése: =L0=[Char|L]=.&lt;br /&gt;
&lt;br /&gt;
A DCG elemző futtatása:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
| ?- szám(&amp;quot;101&amp;quot;, &amp;quot;&amp;quot;).&lt;br /&gt;
yes&lt;br /&gt;
| ?- szám(&amp;quot;102&amp;quot;, L).&lt;br /&gt;
L = [50] ;		 % &amp;quot;2&amp;quot;&lt;br /&gt;
L = [48, 50] ;	% &amp;quot;02&amp;quot;&lt;br /&gt;
no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DCG használata listák akkumulálására===&lt;br /&gt;
&lt;br /&gt;
DCG nyelvtannal hagyományos Prolog eljárások is leírhatók. A lefordított program nem csak elemzésre, hanem lista generálására is használható. Az elemi akkumulálási lépést a &amp;#039;C&amp;#039;/3 adja. Például:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% anbn(N, L1, L2): L1-L2 N db a, majd N db b elemből áll.&lt;br /&gt;
anbn(0) --&amp;gt; !.&lt;br /&gt;
anbn(N) --&amp;gt; {N&amp;gt;0, N1 is N-1}, [a], anbn(N1), [b].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A második DCG szabály kifejtve:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
anbn(N, L0, L) :- N&amp;gt;0, N1 is N-1, L0=[a|L1], anbn(N1, L1, L2), L2=[b|L].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DCG nyelvtani szabályok szerkezete, összefoglalás ==&lt;br /&gt;
 &lt;br /&gt;
* *nemterminális*: tetszőleges hívható kifejezés (atom vagy struktúra). &lt;br /&gt;
* *terminális*: tetszőleges Prolog kifejezés; a 0, 1 vagy több terminális sorozata&lt;br /&gt;
	  listaként helyezhető el a DCG szabályokban. Az üres terminálist &amp;quot;&amp;quot;-gel vagy []-val jelölik.&lt;br /&gt;
	  A string karakterkódok listájára fordul.&lt;br /&gt;
* *feltételek*: tetszőleges Prolog hívás elhelyezhető {} zárójelekbe zárva. A vágót nem kell zárójelbe tenni.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; *A DCG szabály alakja*: baloldal --&amp;gt; jobboldal. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; *baloldal*: egy nemterminális, amit opcionálisan terminálisok listája követhet. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; *jobboldal*:&lt;br /&gt;
* konjunkció (egymás után írás) (,)&lt;br /&gt;
* diszjunkció (;) vagy (|)&lt;br /&gt;
* ha-akkor és ha-akkor-egyébként (-&amp;gt;) és&lt;br /&gt;
* negáció (\+)&lt;br /&gt;
segítségével épül fel terminálisokból, nemterminálisokból és Prolog feltételekből.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>