Skip to content

Instantly share code, notes, and snippets.

@fabiocerqueira
Created December 16, 2014 06:07
Show Gist options
  • Select an option

  • Save fabiocerqueira/a573abcb745f2f47972c to your computer and use it in GitHub Desktop.

Select an option

Save fabiocerqueira/a573abcb745f2f47972c to your computer and use it in GitHub Desktop.
An example of how to make a parsing with pyparsing
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pyparsing import (Keyword, Word, OneOrMore, Optional, CaselessLiteral,
LineEnd, Group, nums)
def robolang():
andar_token = Keyword("andar", caseless=True)
girar_token = Keyword("girar", caseless=True)
esquerda_token = Keyword("esquerda", caseless=True)
direita_token = Keyword("direita", caseless=True)
pegar_token = Keyword("pegar", caseless=True)
soltar_token = Keyword("soltar", caseless=True)
fazer_token = Keyword("fazer", caseless=True)
parar_fazer_token = Keyword("parar de fazer", caseless=True)
num = Word(nums)
vezes_literal = CaselessLiteral('vezes') | CaselessLiteral('vez')
graus_literal = CaselessLiteral('graus') | CaselessLiteral('grau')
andar_stm = andar_token + OneOrMore(num) + vezes_literal
graus_group = Optional(Group(OneOrMore(num) + graus_literal))
girar_stm = girar_token + graus_group + (esquerda_token | direita_token)
pegar_stm = pegar_token
soltar_stm = soltar_token
stmts = (andar_stm | girar_stm | soltar_stm | pegar_stm) + '.'
fazer_stm = (fazer_token + OneOrMore(num) + vezes_literal + ':' +
LineEnd() + OneOrMore(stmts) + LineEnd()
+ parar_fazer_token)
return stmts | fazer_stm
if __name__ == '__main__':
robo = robolang()
print robo.parseString('ANDAR 10 VEZES.')
print robo.parseString('ANDAR 1 VEZ.')
print robo.parseString('GIRAR 90 GRAUS ESQUERDA.')
print robo.parseString('GIRAR 1 GRAU ESQUERDA.')
print robo.parseString('GIRAR 180 GRAUS DIREITA.')
print robo.parseString('GIRAR DIREITA.')
print robo.parseString('GIRAR ESQUERDA.')
print robo.parseString('PEGAR.')
print robo.parseString('SOLTAR.')
print robo.parseString("""
FAZER 4 VEZES:
ANDAR 10 VEZES.
GIRAR ESQUERDA.
PARAR DE FAZER""")
print robo.parseString("""
FAZER 1 VEZ:
ANDAR 10 VEZES.
GIRAR ESQUERDA.
PARAR DE FAZER""")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment