(setq a '(("operator" "(") ("keyword" "deffun") ("identifier" "checkcoord") ("operator" "(") ("identifier" "x") ("identifier" "y") ("operator" ")") ("operator" "(") ("keyword" "if") ("operator" "(") ("keyword" "and") ("operator" "(") ("keyword" "equal") ("identifier" "x") ("integer" "1") ("operator" ")") ("operator" "(") ("keyword" "equal") ("identifier" "y") ("integer" "2") ("operator" ")") ("operator" ")") ("integer" "1") ("integer" "0") ("operator" ")") ("operator" ")"))) (setq change (make-hash-table :test 'equalp)) (setf (gethash "identifier" change) "ID") (setf (gethash "integer" change) "IntegerValue") (setf (gethash "BinaryValue" change) "BinaryValue") (defun parser (lexerlist) (setq lexerl (reverse (map 'list (lambda (x) (cond ((gethash (string (car x)) change) (gethash (string (car x)) change) ) (t (cadr x))) ) lexerlist))) (setq stack '()) (return-from parser (parserHelper lexerl stack)) ) (defun parserHelper(lexerlist stack) (cond ((null lexerlist) nil) ((and (not (null stack)) (not (equal(list-length stack) 2)) (check lexerlist stack)) (setq stack (reducee lexerlist stack)) (append (list (append(reverse lexerlist) '("<") (list (car stack)) '(">")(cdr stack)'("******"))) (parserHelper (cdr lexerlist) stack)) ) ( t (setq stack (append (list (car lexerlist)) stack )) (append (parserHelper (cdr lexerlist) stack)) ) ) ) (defun check (lexerlist stack) (return-from check t) ) (defun reducee (lexerlist stack) (return-from reducee stack) ) (write (parser a))
We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy. Accept Learn more