Finished file
This commit is contained in:
parent
5be6fab3b4
commit
050853bfe2
1 changed files with 183 additions and 1 deletions
|
|
@ -42,3 +42,185 @@ tokens = [
|
|||
'lessEquals',
|
||||
'moreEquals',
|
||||
]
|
||||
|
||||
t_program = r'program'
|
||||
t_end = r'end'
|
||||
t_doubleColon = r'::'
|
||||
t_coma = r','
|
||||
t_integer = r'integer'
|
||||
t_real = r'real'
|
||||
t_openBra = r'\['
|
||||
t_closedBra = r'\]'
|
||||
t_subroutine = r'subroutine'
|
||||
t_parens = r'\(\)'
|
||||
t_openParen = r'\('
|
||||
t_closedParen = r'\)'
|
||||
t_read = r'read'
|
||||
t_print = r'print'
|
||||
t_if = r'if'
|
||||
t_then = r'then'
|
||||
t_else = r'else'
|
||||
t_elif = r'elif'
|
||||
t_do = r'do'
|
||||
t_swap = r'swap'
|
||||
t_exit = r'exit'
|
||||
t_plus = r'\+'
|
||||
t_minus = r'-'
|
||||
t_mul = r'\*'
|
||||
t_string = r'".*"'
|
||||
t_or = r'\.or\.'
|
||||
t_and = r'\.and\.'
|
||||
t_not = r'\.not\.'
|
||||
t_doubleEquals = r'=='
|
||||
t_equals = r'='
|
||||
t_notEquals = r'/='
|
||||
t_div = r'/'
|
||||
t_lessEquals = r'<='
|
||||
t_less = r'<'
|
||||
t_moreEquals = r'>='
|
||||
t_more = r'>'
|
||||
t_ignore = r'\s|\n|!.*\n'
|
||||
|
||||
def t_int(t):
|
||||
r'\d+'
|
||||
t.value = int(t.value)
|
||||
return t
|
||||
|
||||
|
||||
def t_rea(t):
|
||||
r'\d+\.\d+'
|
||||
t.value = float(t.value)
|
||||
return t
|
||||
|
||||
|
||||
def t_id(t):
|
||||
r'[a-zA-Z_]\w*'
|
||||
t.type = 'id'
|
||||
return t
|
||||
|
||||
def t_error(t):
|
||||
print("Illegal character!")
|
||||
t.lexer.skip(1)
|
||||
|
||||
lexer = lex.lex()
|
||||
|
||||
def p_programa(p):
|
||||
'''
|
||||
programa : program id V F B end program
|
||||
'''
|
||||
|
||||
def p_V(p):
|
||||
'''
|
||||
V : V Tipo Dim doubleColon Rid
|
||||
|
|
||||
'''
|
||||
|
||||
def p_Rid(p):
|
||||
'''
|
||||
Rid : id
|
||||
| Rid coma id
|
||||
'''
|
||||
|
||||
def p_Tipo(p):
|
||||
'''
|
||||
Tipo : integer
|
||||
| real
|
||||
'''
|
||||
|
||||
def p_Dim(p):
|
||||
'''
|
||||
Dim : openBra int closedBra
|
||||
| openBra int closedBra openBra int closedBra
|
||||
|
|
||||
'''
|
||||
|
||||
def p_F(p):
|
||||
'''
|
||||
F : F subroutine id B end subroutine
|
||||
|
|
||||
'''
|
||||
|
||||
def p_B(p):
|
||||
'''
|
||||
B : B S
|
||||
|
|
||||
'''
|
||||
|
||||
def p_S(p):
|
||||
'''
|
||||
S : Dimensional equals EA
|
||||
| id parens
|
||||
| read RDimensional
|
||||
| print RDimOrString
|
||||
| if Relif ElseOrEmpty end if
|
||||
| do id equals EA coma EA IntOrEmpty B end do
|
||||
| do B end do
|
||||
| swap Dimensional coma Dimensional
|
||||
| exit
|
||||
'''
|
||||
|
||||
def p_Dimensional(p):
|
||||
'''
|
||||
Dimensional : id DimensionsOrEmpty
|
||||
'''
|
||||
|
||||
def p_DimensionsOrEmpty(p):
|
||||
'''
|
||||
DimensionsOrEmpty : openParen EA ComaEAOrEmpty closedParen
|
||||
|
|
||||
'''
|
||||
|
||||
def p_ComaEAOrEmpty(p):
|
||||
'''
|
||||
ComaEAOrEmpty : coma EA
|
||||
|
|
||||
'''
|
||||
|
||||
def p_RDimensional(p):
|
||||
'''
|
||||
RDimensional : Dimensional
|
||||
| RDimensional , Dimensional
|
||||
'''
|
||||
|
||||
def p_RDimOrString(p):
|
||||
'''
|
||||
RDimOrString : DimOrString
|
||||
| RDimOrString coma DimOrString
|
||||
'''
|
||||
|
||||
def p_DimOrString(p):
|
||||
'''
|
||||
DimOrString : Dimensional
|
||||
| string
|
||||
'''
|
||||
|
||||
def p_Relif(p):
|
||||
'''
|
||||
Relif : openParen EL closedParen then B
|
||||
| Relif elif openParen EL closedParen then B
|
||||
'''
|
||||
|
||||
def p_ElseOrEmpty(p):
|
||||
'''
|
||||
ElseOrEmpty : else B
|
||||
|
|
||||
'''
|
||||
|
||||
def p_IntOrEmpty(p):
|
||||
'''
|
||||
IntOrEmpty : coma int
|
||||
|
|
||||
'''
|
||||
|
||||
def p_EA(p):
|
||||
'''
|
||||
EA : MultDiv
|
||||
| EA SumOrSub MultDiv
|
||||
'''
|
||||
|
||||
def p_SumOrSub(p):
|
||||
'''
|
||||
SumOrSub : plus
|
||||
| minus
|
||||
'''
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue