Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- import webbrowser
- import time
- # Definindo caminho do chrome
- chrome_path="C:\Program Files\Google\Chrome\Application\chrome.exe"
- webbrowser.register('chrome', None,webbrowser.BackgroundBrowser(chrome_path))
- # dicionário para mapear os nomes dos tokens com as expressões regulares
- regex_tokens = {
- 'LOOP': r'loop',
- 'BROWSER': r'chrome|firefox|edge|safari',
- 'LINK': r'https?://[^\s]+',
- # 'TEMPO': r'\d+',
- 'TEMPO': r'15_min|20_min|1_hora|1_dia|2_dias|sem_limite',
- 'ESPACO': r'\s+',
- 'VEZES': r'1|2|3|4|5',
- 'PV': r';'
- }
- def lexer(codigo):
- tokens = []
- while codigo:
- match = False
- # print(codigo)
- for nome, regex in regex_tokens.items():
- resultado = re.match(regex, codigo) # tenta encontrar um padrão no início da string
- # se encontrou
- if resultado:
- lexema = resultado.group() # extrai o texto que corresponde ao token
- tokens.append((nome, lexema))
- codigo = codigo[len(lexema):] # remove o lexema do código
- match = True # marca que houve um reconhecimento
- break
- if not match:
- print('Lexema não reconhecido')
- lexemaErrado = codigo.split()
- raise Exception(f'Lexema não reconhecido: {lexemaErrado[0]}') # lança uma exceção com a parte inválida do código
- return tokens
- class NoComando:
- # construtor da classe
- def __init__(self, browser, link, tempo):
- # atributos da classe
- self.browser = browser
- self.link = link
- self.tempo = tempo
- def __str__(self) -> str:
- return self.browser + "," + self.link + "," + self.tempo
- def reconhece(tokens, lookahead, tipo):
- # print(f'lh: {lookahead}')
- # print(tokens[lookahead])
- if tokens[lookahead][0] == tipo and lookahead < len(tokens):
- return True
- return False
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def tempo(tokens, lookahead):
- if reconhece(tokens, lookahead, 'TEMPO') and reconhece(tokens, lookahead + 1, 'PV'):
- print('reconhece tempo')
- return True
- print('nao foi tempo')
- return
- def link(tokens, lookahead):
- print(tokens[lookahead])
- if reconhece(tokens, lookahead, 'LINK') and reconhece(tokens, lookahead + 1, 'ESPACO'):
- # print('reconhece link')
- if tempo(tokens, lookahead + 2):
- return True
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def navegar(tokens, lookahead):
- if reconhece(tokens, lookahead, 'BROWSER') and reconhece(tokens, lookahead + 1, 'ESPACO'):
- # print('reconhece browser')
- if tempo(tokens, lookahead + 2):
- return True
- elif link(tokens, lookahead + 2):
- return True
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def explore(tokens, lookahead):
- if navegar(tokens, lookahead):
- return True
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def vezes(tokens, lookahead):
- if reconhece(tokens, lookahead, 'VEZES') and reconhece(tokens, lookahead + 1, 'ESPACO'):
- # print('reconhece vezes')
- if explore(tokens, lookahead + 2):
- return True
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def programa_sol(tokens, lookahead):
- if reconhece(tokens, lookahead, 'LOOP') and reconhece(tokens, lookahead + 1, 'ESPACO'):
- # print('reconhece loop')
- if vezes(tokens, lookahead + 2):
- return True
- else:
- raise Exception(f'Erro de sintaxe: {tokens[lookahead]}')
- def parser(tokens):
- lookahead = 0
- # browser = -1 # Não sei se vai precisar ser usado
- # link = -1
- # tempo = -1
- if reconhece(tokens, lookahead, 'LOOP') and reconhece(tokens, lookahead + 1, 'ESPACO'):
- if not programa_sol(tokens, lookahead):
- return False
- else:
- return True # Arrumar um jeito de fazer o programa_sol retornar um NoComando montado
- print('Sintaxe inválida')
- return False
- def executar(arvore):
- # extrai os atributos do nó da árvore
- browser = arvore.browser
- print(f'Browser: {browser}')
- link = arvore.link
- print(f'Link: {link}')
- tempo = int(arvore.tempo)
- print(f'Tempo: {tempo}')
- # abre o navegador com o link especificado
- webbrowser.get(browser).open(link)
- # espera o tempo especificado em segundos
- time.sleep(tempo)
- # fecha o navegador
- webbrowser.get(browser).close()
- # lê uma string do usuário
- codigo = input('Digite um comando: ')
- # chama o lexer para gerar os tokens
- tokens = lexer(codigo)
- # chama o parser para gerar a árvore sintática
- arvore = parser(tokens)
- # chama a função para executar o comando
- print(f'Tokens: {tokens}')
- print(f'Arvore: {arvore}')
- # executar(arvore)
- # chrome https://www.youtube.com/ 15_min
- # loop 2 chrome https://www.youtube.com/ 15_min;
- # loop 2 chrome 15_min;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement