I need to define a grammar to parse the code below:
P1 ATTACKS p2 // P1 represents a pawn in chess game and p2 represents an opponent pawn
OR
P1 DEFENDS P2
OR
P1 IATTACKS p2,p3
OR
P1 IDEFENDS P2,P3
In order to do that I wrote the Python code below:
<code>import pypeg2 as g
// actor() is a symbol representing a piece of chess game and a number associated to it
def actor(): return g.re.compile(r"[KQRNBPFS]d", g.re.IGNORECASE)
// this class is a symbol which defines a kind of action in chess game between two or more pieces, IATTACKS means INDIRECT ATTACK and so on
class SceneryAction(str):
grammar = g.Enum(g.K("ATTACKS"), g.K("DEFENDS"), g.K("IATTACKS"), g.K("IDEFENDS"))
// this class represents an action occurring and must be parsed as an actor (piece) doing some action over another actor (piece)
class SceneryFrame(str):
grammar = actor(), SceneryAction(), (actor(), g.csl(actor())), g.endl
</code>
<code>import pypeg2 as g
// actor() is a symbol representing a piece of chess game and a number associated to it
def actor(): return g.re.compile(r"[KQRNBPFS]d", g.re.IGNORECASE)
// this class is a symbol which defines a kind of action in chess game between two or more pieces, IATTACKS means INDIRECT ATTACK and so on
class SceneryAction(str):
grammar = g.Enum(g.K("ATTACKS"), g.K("DEFENDS"), g.K("IATTACKS"), g.K("IDEFENDS"))
// this class represents an action occurring and must be parsed as an actor (piece) doing some action over another actor (piece)
class SceneryFrame(str):
grammar = actor(), SceneryAction(), (actor(), g.csl(actor())), g.endl
</code>
import pypeg2 as g
// actor() is a symbol representing a piece of chess game and a number associated to it
def actor(): return g.re.compile(r"[KQRNBPFS]d", g.re.IGNORECASE)
// this class is a symbol which defines a kind of action in chess game between two or more pieces, IATTACKS means INDIRECT ATTACK and so on
class SceneryAction(str):
grammar = g.Enum(g.K("ATTACKS"), g.K("DEFENDS"), g.K("IATTACKS"), g.K("IDEFENDS"))
// this class represents an action occurring and must be parsed as an actor (piece) doing some action over another actor (piece)
class SceneryFrame(str):
grammar = actor(), SceneryAction(), (actor(), g.csl(actor())), g.endl
The final goal of this grammar is to define a language for pattern representation in chess games.
However, when I try to parse this line:
<code>k = g.parse("P1 ATTACKS p1n",SceneryFrame)
</code>
<code>k = g.parse("P1 ATTACKS p1n",SceneryFrame)
</code>
k = g.parse("P1 ATTACKS p1n",SceneryFrame)
I got this error:
<code> File "d:DocumentsProjectsPythonStratVisionPATLANParser.py", line 62, in <module>
k = g.parse("P1 ATTACKS p1n",SceneryFrame)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 667, in parse
t, r = parser.parse(text, thing)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 794, in parse
raise r
File "<string>", line 1
P1
^
SyntaxError: expecting match on [KQRNBPFS]d
</code>
<code> File "d:DocumentsProjectsPythonStratVisionPATLANParser.py", line 62, in <module>
k = g.parse("P1 ATTACKS p1n",SceneryFrame)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 667, in parse
t, r = parser.parse(text, thing)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 794, in parse
raise r
File "<string>", line 1
P1
^
SyntaxError: expecting match on [KQRNBPFS]d
</code>
File "d:DocumentsProjectsPythonStratVisionPATLANParser.py", line 62, in <module>
k = g.parse("P1 ATTACKS p1n",SceneryFrame)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 667, in parse
t, r = parser.parse(text, thing)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:PythonLibsite-packagespypeg2__init__.py", line 794, in parse
raise r
File "<string>", line 1
P1
^
SyntaxError: expecting match on [KQRNBPFS]d
4