Commit 297eea71 authored by Igor Dejanovic's avatar Igor Dejanovic

Fixing PEP8 violations in peg_peg.

parent 40c1b0a9
...@@ -5,35 +5,36 @@ ...@@ -5,35 +5,36 @@
# Author: Igor R. Dejanovic <igor DOT dejanovic AT gmail DOT com> # Author: Igor R. Dejanovic <igor DOT dejanovic AT gmail DOT com>
# Copyright: (c) 2009 Igor R. Dejanovic <igor DOT dejanovic AT gmail DOT com> # Copyright: (c) 2009 Igor R. Dejanovic <igor DOT dejanovic AT gmail DOT com>
# License: MIT License # License: MIT License
# #
# PEG can be used to describe PEG. # PEG can be used to describe PEG.
# This example demonstrates building PEG parser using PEG based grammar of PEG # This example demonstrates building PEG parser using PEG based grammar of PEG
# grammar definition language. # grammar definition language.
############################################################################## ##############################################################################
from arpeggio import * from arpeggio import *
from arpeggio.export import PMDOTExport, PTDOTExport from arpeggio.export import PMDOTExport, PTDOTExport
from arpeggio import RegExMatch as _
from arpeggio.peg import ParserPEG from arpeggio.peg import ParserPEG
import logging import logging
# Semantic actions # Semantic actions
from arpeggio.peg import SemGrammar, SemRule, SemOrderedChoice, SemSequence, SemPrefix, \ from arpeggio.peg import SemGrammar, SemRule, SemOrderedChoice, SemSequence,\
SemSufix, SemExpression, SemRegEx, SemIdentifier, SemLiteral, SemTerminal SemPrefix, SemSufix, SemExpression, SemRegEx, SemIdentifier, SemLiteral,\
SemTerminal
sem_actions = { sem_actions = {
"grammar" : SemGrammar(), "grammar": SemGrammar(),
"rule" : SemRule(), "rule": SemRule(),
"ordered_choice" : SemOrderedChoice(), "ordered_choice": SemOrderedChoice(),
"sequence" : SemSequence(), "sequence": SemSequence(),
"prefix" : SemPrefix(), "prefix": SemPrefix(),
"sufix" : SemSufix(), "sufix": SemSufix(),
"expression" : SemExpression(), "expression": SemExpression(),
"regex" : SemRegEx(), "regex": SemRegEx(),
"identifier" : SemIdentifier(), "identifier": SemIdentifier(),
"literal" : SemLiteral() "literal": SemLiteral()
} }
for sem in ["LEFT_ARROW", "SLASH", "STAR", "QUESTION", "PLUS", "AND", "NOT", "OPEN", "CLOSE"]: for sem in ["LEFT_ARROW", "SLASH", "STAR", "QUESTION", "PLUS", "AND", "NOT",
"OPEN", "CLOSE"]:
sem_actions[sem] = SemTerminal() sem_actions[sem] = SemTerminal()
...@@ -45,7 +46,7 @@ peg_grammar = r""" ...@@ -45,7 +46,7 @@ peg_grammar = r"""
sequence <- prefix+; sequence <- prefix+;
prefix <- (AND/NOT)? sufix; prefix <- (AND/NOT)? sufix;
sufix <- expression (QUESTION/STAR/PLUS)?; sufix <- expression (QUESTION/STAR/PLUS)?;
expression <- regex / (identifier !LEFT_ARROW) expression <- regex / (identifier !LEFT_ARROW)
/ ("(" ordered_choice ")") / literal; / ("(" ordered_choice ")") / literal;
identifier <- r'[a-zA-Z_]([a-zA-Z_]|[0-9])*'; identifier <- r'[a-zA-Z_]([a-zA-Z_]|[0-9])*';
...@@ -63,27 +64,27 @@ peg_grammar = r""" ...@@ -63,27 +64,27 @@ peg_grammar = r"""
DOT <- '.'; DOT <- '.';
comment <- '//' r'.*\n'; comment <- '//' r'.*\n';
""" """
try: try:
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
# ParserPEG will use ParserPython to parse peg_grammar definition and # ParserPEG will use ParserPython to parse peg_grammar definition and
# create parser_model for parsing PEG based grammars # create parser_model for parsing PEG based grammars
parser = ParserPEG(peg_grammar, 'grammar') parser = ParserPEG(peg_grammar, 'grammar')
# Exporting parser model to dot file in order to visualise. # Exporting parser model to dot file in order to visualise.
PMDOTExport().exportFile(parser.parser_model, PMDOTExport().exportFile(parser.parser_model,
"peg_peg_parser_model.dot") "peg_peg_parser_model.dot")
# Now we will use created parser to parse the same peg_grammar used for parser # Now we will use created parser to parse the same peg_grammar used for
# initialization. We can parse peg_grammar because it is specified using # parser initialization. We can parse peg_grammar because it is specified
# PEG itself. # using PEG itself.
parser.parse(peg_grammar) parser.parse(peg_grammar)
PTDOTExport().exportFile(parser.parse_tree, PTDOTExport().exportFile(parser.parse_tree,
"peg_peg_parse_tree.dot") "peg_peg_parse_tree.dot")
# ASG should be the same as parser.parser_model because semantic # ASG should be the same as parser.parser_model because semantic
# actions will create PEG parser (tree of ParsingExpressions). # actions will create PEG parser (tree of ParsingExpressions).
asg = parser.getASG(sem_actions) asg = parser.getASG(sem_actions)
...@@ -91,13 +92,13 @@ try: ...@@ -91,13 +92,13 @@ try:
# This graph should be the same as peg_peg_parser_model.dot because # This graph should be the same as peg_peg_parser_model.dot because
# they define the same parser. # they define the same parser.
PMDOTExport().exportFile(asg, PMDOTExport().exportFile(asg,
"peg_peg_asg.dot") "peg_peg_asg.dot")
# If we replace parser_mode with ASG constructed parser it will still # If we replace parser_mode with ASG constructed parser it will still
# parse PEG grammars # parse PEG grammars
parser.parser_model = asg parser.parser_model = asg
parser.parse(peg_grammar) parser.parse(peg_grammar)
except NoMatch, e: except NoMatch, e:
print "Expected %s at position %s." % (e.value, str(e.parser.pos_to_linecol(e.position))) print "Expected %s at position %s." % \
(e.value, str(e.parser.pos_to_linecol(e.position)))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment