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.
102 lines
1.6 KiB
102 lines
1.6 KiB
/* |
|
Language: Prolog |
|
Description: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics. |
|
Author: Raivo Laanemets <raivo@infdot.com> |
|
Website: https://en.wikipedia.org/wiki/Prolog |
|
*/ |
|
|
|
function prolog(hljs) { |
|
const ATOM = { |
|
|
|
begin: /[a-z][A-Za-z0-9_]*/, |
|
relevance: 0 |
|
}; |
|
|
|
const VAR = { |
|
|
|
className: 'symbol', |
|
variants: [ |
|
{ |
|
begin: /[A-Z][a-zA-Z0-9_]*/ |
|
}, |
|
{ |
|
begin: /_[A-Za-z0-9_]*/ |
|
} |
|
], |
|
relevance: 0 |
|
}; |
|
|
|
const PARENTED = { |
|
|
|
begin: /\(/, |
|
end: /\)/, |
|
relevance: 0 |
|
}; |
|
|
|
const LIST = { |
|
|
|
begin: /\[/, |
|
end: /\]/ |
|
}; |
|
|
|
const LINE_COMMENT = { |
|
|
|
className: 'comment', |
|
begin: /%/, |
|
end: /$/, |
|
contains: [ hljs.PHRASAL_WORDS_MODE ] |
|
}; |
|
|
|
const BACKTICK_STRING = { |
|
|
|
className: 'string', |
|
begin: /`/, |
|
end: /`/, |
|
contains: [ hljs.BACKSLASH_ESCAPE ] |
|
}; |
|
|
|
const CHAR_CODE = { |
|
className: 'string', // 0'a etc. |
|
begin: /0'(\\'|.)/ |
|
}; |
|
|
|
const SPACE_CODE = { |
|
className: 'string', |
|
begin: /0'\\s/ // 0'\s |
|
}; |
|
|
|
const PRED_OP = { // relevance booster |
|
begin: /:-/ |
|
}; |
|
|
|
const inner = [ |
|
|
|
ATOM, |
|
VAR, |
|
PARENTED, |
|
PRED_OP, |
|
LIST, |
|
LINE_COMMENT, |
|
hljs.C_BLOCK_COMMENT_MODE, |
|
hljs.QUOTE_STRING_MODE, |
|
hljs.APOS_STRING_MODE, |
|
BACKTICK_STRING, |
|
CHAR_CODE, |
|
SPACE_CODE, |
|
hljs.C_NUMBER_MODE |
|
]; |
|
|
|
PARENTED.contains = inner; |
|
LIST.contains = inner; |
|
|
|
return { |
|
name: 'Prolog', |
|
contains: inner.concat([ |
|
{ // relevance booster |
|
begin: /\.$/ |
|
} |
|
]) |
|
}; |
|
} |
|
|
|
module.exports = prolog;
|
|
|