Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

traverse.ts 1.4KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { NonTerminalResult } from './result/NonTerminalResult'
  2. import { TerminalResult } from './result/TerminalResult'
  3. type NodeVisitor = (node: NonTerminalResult, parentNode?: NonTerminalResult, property?: string) => void
  4. function _traverse (node: NonTerminalResult, parentNode?: NonTerminalResult, property?: string, onEnter?: NodeVisitor, onLeave?: NodeVisitor): void {
  5. onEnter?.(node, parentNode, property)
  6. if ('left' in node && node.left !== undefined) {
  7. _traverse(node.left, node, 'left', onEnter, onLeave)
  8. }
  9. if ('element' in node && node.element !== undefined) {
  10. _traverse(node.element, node, 'element', onEnter, onLeave)
  11. }
  12. if ('elements' in node && node.elements !== undefined) {
  13. for (const element of node.elements) {
  14. _traverse(element, node, 'elements', onEnter, onLeave)
  15. }
  16. }
  17. if ('parameters' in node && node.parameters !== undefined) {
  18. for (const param of node.parameters) {
  19. _traverse(param, node, 'parameters', onEnter, onLeave)
  20. }
  21. }
  22. if ('right' in node && node.right !== undefined) {
  23. _traverse(node.right, node, 'right', onEnter, onLeave)
  24. }
  25. if ('returnType' in node && node.returnType !== undefined) {
  26. _traverse(node.returnType, node, 'returnType', onEnter, onLeave)
  27. }
  28. onLeave?.(node, parentNode, property)
  29. }
  30. export function traverse (node: TerminalResult, onEnter?: NodeVisitor, onLeave?: NodeVisitor): void {
  31. _traverse(node, undefined, undefined, onEnter, onLeave)
  32. }