From 0b19bb71ba5a4afa84e673a8239935426fa0db23 Mon Sep 17 00:00:00 2001 From: ptmcg Date: Tue, 9 Aug 2016 21:50:19 +0000 Subject: Remove incorrect tag directory git-svn-id: svn://svn.code.sf.net/p/pyparsing/code/tags/pyparsing_2.1.6@405 9bf210a0-9d2d-494c-87cf-cfb32e7dff7b --- trunk/src/examples/pgn.py | 94 ----------------------------------------------- 1 file changed, 94 deletions(-) delete mode 100644 trunk/src/examples/pgn.py (limited to 'trunk/src/examples/pgn.py') diff --git a/trunk/src/examples/pgn.py b/trunk/src/examples/pgn.py deleted file mode 100644 index d13f83e..0000000 --- a/trunk/src/examples/pgn.py +++ /dev/null @@ -1,94 +0,0 @@ -# pgn.py rel. 1.1 17-sep-2004 -# -# Demonstration of the parsing module, implementing a pgn parser. -# -# The aim of this parser is not to support database application, -# but to create automagically a pgn annotated reading the log console file -# of a lecture of ICC (Internet Chess Club), saved by Blitzin. -# Of course you can modify the Abstract Syntax Tree to your purpose. -# -# Copyright 2004, by Alberto Santini http://www.albertosantini.it/chess/ -# -from pyparsing import alphanums, nums, quotedString -from pyparsing import Combine, Forward, Group, Literal, oneOf, OneOrMore, Optional, Suppress, ZeroOrMore, White, Word -from pyparsing import ParseException - -# -# define pgn grammar -# - -tag = Suppress("[") + Word(alphanums) + Combine(quotedString) + Suppress("]") -comment = Suppress("{") + Word(alphanums + " ") + Suppress("}") - -dot = Literal(".") -piece = oneOf("K Q B N R") -file_coord = oneOf("a b c d e f g h") -rank_coord = oneOf("1 2 3 4 5 6 7 8") -capture = oneOf("x :") -promote = Literal("=") -castle_queenside = oneOf("O-O-O 0-0-0 o-o-o") -castle_kingside = oneOf("O-O 0-0 o-o") - -move_number = Optional(comment) + Word(nums) + dot -m1 = file_coord + rank_coord # pawn move e.g. d4 -m2 = file_coord + capture + file_coord + rank_coord # pawn capture move e.g. dxe5 -m3 = file_coord + "8" + promote + piece # pawn promotion e.g. e8=Q -m4 = piece + file_coord + rank_coord # piece move e.g. Be6 -m5 = piece + file_coord + file_coord + rank_coord # piece move e.g. Nbd2 -m6 = piece + rank_coord + file_coord + rank_coord # piece move e.g. R4a7 -m7 = piece + capture + file_coord + rank_coord # piece capture move e.g. Bxh7 -m8 = castle_queenside | castle_kingside # castling e.g. o-o - -check = oneOf("+ ++") -mate = Literal("#") -annotation = Word("!?", max=2) -nag = " $" + Word(nums) -decoration = check | mate | annotation | nag - -variant = Forward() -half_move = Combine((m3 | m1 | m2 | m4 | m5 | m6 | m7 | m8) + Optional(decoration)) \ - + Optional(comment) +Optional(variant) -move = Suppress(move_number) + half_move + Optional(half_move) -variant << "(" + OneOrMore(move) + ")" -# grouping the plies (half-moves) for each move: useful to group annotations, variants... -# suggested by Paul McGuire :) -move = Group(Suppress(move_number) + half_move + Optional(half_move)) -variant << Group("(" + OneOrMore(move) + ")") -game_terminator = oneOf("1-0 0-1 1/2-1/2 *") - -pgnGrammar = Suppress(ZeroOrMore(tag)) + ZeroOrMore(move) + Optional(Suppress(game_terminator)) - -def parsePGN( pgn, bnf=pgnGrammar, fn=None ): - try: - return bnf.parseString( pgn ) - except ParseException as err: - print(err.line) - print(" "*(err.column-1) + "^") - print(err) - -if __name__ == "__main__": - # input string - pgn = """ -[Event "ICC 5 0 u"] -[Site "Internet Chess Club"] -[Date "2004.01.25"] -[Round "-"] -[White "guest920"] -[Black "IceBox"] -[Result "0-1"] -[ICCResult "White checkmated"] -[BlackElo "1498"] -[Opening "French defense"] -[ECO "C00"] -[NIC "FR.01"] -[Time "04:44:56"] -[TimeControl "300+0"] - -1. e4 e6 2. Nf3 d5 $2 3. exd5 (3. e5 g6 4. h4) exd5 4. Qe2+ Qe7 5. Qxe7+ Bxe7 6. d3 Nf6 7. Be3 -Bg4 8. Nbd2 c5 9. h3 Be6 10. O-O-O Nc6 11. g4 Bd6 12. g5 Nd7 13. Rg1 d4 14. -g6 fxg6 15. Bg5 Rf8 16. a3 Bd5 17. Re1+ Nde5 18. Nxe5 Nxe5 19. Bf4 Rf5 20. -Bxe5 Rxe5 21. Rg5 Rxe1# {Black wins} 0-1 -""" - # parse input string - tokens = parsePGN(pgn, pgnGrammar) - print(tokens.dump()) -- cgit v1.2.1