Finished with first homework

This commit is contained in:
Mariano Uvalle 2019-03-10 19:38:15 -06:00
parent ef04c9bb79
commit 23a94196fb
3 changed files with 172 additions and 0 deletions

51
HW1_holaquetal/hola.py Normal file
View file

@ -0,0 +1,51 @@
import ply.lex as lex
import ply.yacc as yacc
tokens = [
'HOLA',
'COMA',
'QUE',
'TAL',
]
t_HOLA = r'hola'
t_COMA = r','
t_QUE = r'que'
t_TAL = r'tal'
t_ignore = r' '
def t_error(t):
print("Illegal character!")
t.lexer.skip(1)
lexer = lex.lex()
def p_phrase(p):
'''
phrase : a QUE TAL
'''
print('✓✓✓ Valid phrase')
def p_a(p):
'''
a : HOLA COMA a
| HOLA
'''
def p_error(p):
print('xxx Invalid phrase')
parser = yacc.yacc()
while True:
try:
s = input('')
except EOFError:
break
parser.parse(s)

88
HW1_holaquetal/parser.out Normal file
View file

@ -0,0 +1,88 @@
Created by PLY version 3.11 (http://www.dabeaz.com/ply)
Grammar
Rule 0 S' -> phrase
Rule 1 phrase -> a QUE TAL
Rule 2 a -> HOLA COMA a
Rule 3 a -> HOLA
Terminals, with rules where they appear
COMA : 2
HOLA : 2 3
QUE : 1
TAL : 1
error :
Nonterminals, with rules where they appear
a : 1 2
phrase : 0
Parsing method: LALR
state 0
(0) S' -> . phrase
(1) phrase -> . a QUE TAL
(2) a -> . HOLA COMA a
(3) a -> . HOLA
HOLA shift and go to state 3
phrase shift and go to state 1
a shift and go to state 2
state 1
(0) S' -> phrase .
state 2
(1) phrase -> a . QUE TAL
QUE shift and go to state 4
state 3
(2) a -> HOLA . COMA a
(3) a -> HOLA .
COMA shift and go to state 5
QUE reduce using rule 3 (a -> HOLA .)
state 4
(1) phrase -> a QUE . TAL
TAL shift and go to state 6
state 5
(2) a -> HOLA COMA . a
(2) a -> . HOLA COMA a
(3) a -> . HOLA
HOLA shift and go to state 3
a shift and go to state 7
state 6
(1) phrase -> a QUE TAL .
$end reduce using rule 1 (phrase -> a QUE TAL .)
state 7
(2) a -> HOLA COMA a .
QUE reduce using rule 2 (a -> HOLA COMA a .)

View file

@ -0,0 +1,33 @@
# parsetab.py
# This file is automatically generated. Do not edit.
# pylint: disable=W,C,R
_tabversion = '3.10'
_lr_method = 'LALR'
_lr_signature = 'COMA HOLA QUE TAL\n phrase : a QUE TAL\n \n a : HOLA COMA a\n | HOLA\n '
_lr_action_items = {'HOLA':([0,5,],[3,3,]),'$end':([1,6,],[0,-1,]),'QUE':([2,3,7,],[4,-3,-2,]),'COMA':([3,],[5,]),'TAL':([4,],[6,]),}
_lr_action = {}
for _k, _v in _lr_action_items.items():
for _x,_y in zip(_v[0],_v[1]):
if not _x in _lr_action: _lr_action[_x] = {}
_lr_action[_x][_k] = _y
del _lr_action_items
_lr_goto_items = {'phrase':([0,],[1,]),'a':([0,5,],[2,7,]),}
_lr_goto = {}
for _k, _v in _lr_goto_items.items():
for _x, _y in zip(_v[0], _v[1]):
if not _x in _lr_goto: _lr_goto[_x] = {}
_lr_goto[_x][_k] = _y
del _lr_goto_items
_lr_productions = [
("S' -> phrase","S'",1,None,None,None),
('phrase -> a QUE TAL','phrase',3,'p_phrase','hola.py',28),
('a -> HOLA COMA a','a',3,'p_a','hola.py',34),
('a -> HOLA','a',1,'p_a','hola.py',35),
]