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.

parse.ts 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { Parser } from './Parser'
  2. import { jsdocGrammar } from './grammars/jsdocGrammar'
  3. import { closureGrammar } from './grammars/closureGrammar'
  4. import { typescriptGrammar } from './grammars/typescriptGrammar'
  5. import { TerminalResult } from './result/TerminalResult'
  6. export type ParseMode = 'closure' | 'jsdoc' | 'typescript'
  7. const parsers = {
  8. jsdoc: new Parser(jsdocGrammar()),
  9. closure: new Parser(closureGrammar()),
  10. typescript: new Parser(typescriptGrammar())
  11. }
  12. /**
  13. * This function parses the given expression in the given mode and produces a {@link ParseResult}.
  14. * @param expression
  15. * @param mode
  16. */
  17. export function parse (expression: string, mode: ParseMode): TerminalResult {
  18. return parsers[mode].parseText(expression)
  19. }
  20. /**
  21. * This function tries to parse the given expression in multiple modes and returns the first successful
  22. * {@link ParseResult}. By default it tries `'typescript'`, `'closure'` and `'jsdoc'` in this order. If
  23. * no mode was successful it throws the error that was produced by the last parsing attempt.
  24. * @param expression
  25. * @param modes
  26. */
  27. export function tryParse (expression: string, modes: ParseMode[] = ['typescript', 'closure', 'jsdoc']): TerminalResult {
  28. let error
  29. for (const mode of modes) {
  30. try {
  31. return parsers[mode].parseText(expression)
  32. } catch (e) {
  33. error = e
  34. }
  35. }
  36. throw error
  37. }