54 lines
		
	
	
		
			989 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			989 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						||
Language: Extended Backus-Naur Form
 | 
						||
Author: Alex McKibben <alex@nullscope.net>
 | 
						||
Website: https://en.wikipedia.org/wiki/Extended_Backus–Naur_form
 | 
						||
*/
 | 
						||
 | 
						||
/** @type LanguageFn */
 | 
						||
function ebnf(hljs) {
 | 
						||
  const commentMode = hljs.COMMENT(/\(\*/, /\*\)/);
 | 
						||
 | 
						||
  const nonTerminalMode = {
 | 
						||
    className: "attribute",
 | 
						||
    begin: /^[ ]*[a-zA-Z]+([\s_-]+[a-zA-Z]+)*/
 | 
						||
  };
 | 
						||
 | 
						||
  const specialSequenceMode = {
 | 
						||
    className: "meta",
 | 
						||
    begin: /\?.*\?/
 | 
						||
  };
 | 
						||
 | 
						||
  const ruleBodyMode = {
 | 
						||
    begin: /=/,
 | 
						||
    end: /[.;]/,
 | 
						||
    contains: [
 | 
						||
      commentMode,
 | 
						||
      specialSequenceMode,
 | 
						||
      {
 | 
						||
        // terminals
 | 
						||
        className: 'string',
 | 
						||
        variants: [
 | 
						||
          hljs.APOS_STRING_MODE,
 | 
						||
          hljs.QUOTE_STRING_MODE,
 | 
						||
          {
 | 
						||
            begin: '`',
 | 
						||
            end: '`'
 | 
						||
          }
 | 
						||
        ]
 | 
						||
      }
 | 
						||
    ]
 | 
						||
  };
 | 
						||
 | 
						||
  return {
 | 
						||
    name: 'Extended Backus-Naur Form',
 | 
						||
    illegal: /\S/,
 | 
						||
    contains: [
 | 
						||
      commentMode,
 | 
						||
      nonTerminalMode,
 | 
						||
      ruleBodyMode
 | 
						||
    ]
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
module.exports = ebnf;
 |