ebnf.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. Language: Extended Backus-Naur Form
  3. Author: Alex McKibben <alex@nullscope.net>
  4. Website: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form
  5. */
  6. function ebnf(hljs) {
  7. var commentMode = hljs.COMMENT(/\(\*/, /\*\)/);
  8. var nonTerminalMode = {
  9. className: "attribute",
  10. begin: /^[ ]*[a-zA-Z][a-zA-Z-_]*([\s-_]+[a-zA-Z][a-zA-Z]*)*/
  11. };
  12. var specialSequenceMode = {
  13. className: "meta",
  14. begin: /\?.*\?/
  15. };
  16. var ruleBodyMode = {
  17. begin: /=/, end: /[.;]/,
  18. contains: [
  19. commentMode,
  20. specialSequenceMode,
  21. {
  22. // terminals
  23. className: 'string',
  24. variants: [
  25. hljs.APOS_STRING_MODE,
  26. hljs.QUOTE_STRING_MODE,
  27. {begin: '`', end: '`'},
  28. ]
  29. },
  30. ]
  31. };
  32. return {
  33. name: 'Extended Backus-Naur Form',
  34. illegal: /\S/,
  35. contains: [
  36. commentMode,
  37. nonTerminalMode,
  38. ruleBodyMode
  39. ]
  40. };
  41. }
  42. module.exports = ebnf;