mirror of https://github.com/jkjoy/sunpeiwen.git
172 lines
3.2 KiB
JavaScript
172 lines
3.2 KiB
JavaScript
/*
|
|
Language: TP
|
|
Author: Jay Strybis <jay.strybis@gmail.com>
|
|
Description: FANUC TP programming language (TPP).
|
|
*/
|
|
|
|
function tp(hljs) {
|
|
const TPID = {
|
|
className: 'number',
|
|
begin: '[1-9][0-9]*', /* no leading zeros */
|
|
relevance: 0
|
|
};
|
|
const TPLABEL = {
|
|
className: 'symbol',
|
|
begin: ':[^\\]]+'
|
|
};
|
|
const TPDATA = {
|
|
className: 'built_in',
|
|
begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|'
|
|
+ 'TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[',
|
|
end: '\\]',
|
|
contains: [
|
|
'self',
|
|
TPID,
|
|
TPLABEL
|
|
]
|
|
};
|
|
const TPIO = {
|
|
className: 'built_in',
|
|
begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[',
|
|
end: '\\]',
|
|
contains: [
|
|
'self',
|
|
TPID,
|
|
hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
|
|
TPLABEL
|
|
]
|
|
};
|
|
|
|
const KEYWORDS = [
|
|
"ABORT",
|
|
"ACC",
|
|
"ADJUST",
|
|
"AND",
|
|
"AP_LD",
|
|
"BREAK",
|
|
"CALL",
|
|
"CNT",
|
|
"COL",
|
|
"CONDITION",
|
|
"CONFIG",
|
|
"DA",
|
|
"DB",
|
|
"DIV",
|
|
"DETECT",
|
|
"ELSE",
|
|
"END",
|
|
"ENDFOR",
|
|
"ERR_NUM",
|
|
"ERROR_PROG",
|
|
"FINE",
|
|
"FOR",
|
|
"GP",
|
|
"GUARD",
|
|
"INC",
|
|
"IF",
|
|
"JMP",
|
|
"LINEAR_MAX_SPEED",
|
|
"LOCK",
|
|
"MOD",
|
|
"MONITOR",
|
|
"OFFSET",
|
|
"Offset",
|
|
"OR",
|
|
"OVERRIDE",
|
|
"PAUSE",
|
|
"PREG",
|
|
"PTH",
|
|
"RT_LD",
|
|
"RUN",
|
|
"SELECT",
|
|
"SKIP",
|
|
"Skip",
|
|
"TA",
|
|
"TB",
|
|
"TO",
|
|
"TOOL_OFFSET",
|
|
"Tool_Offset",
|
|
"UF",
|
|
"UT",
|
|
"UFRAME_NUM",
|
|
"UTOOL_NUM",
|
|
"UNLOCK",
|
|
"WAIT",
|
|
"X",
|
|
"Y",
|
|
"Z",
|
|
"W",
|
|
"P",
|
|
"R",
|
|
"STRLEN",
|
|
"SUBSTR",
|
|
"FINDSTR",
|
|
"VOFFSET",
|
|
"PROG",
|
|
"ATTR",
|
|
"MN",
|
|
"POS"
|
|
];
|
|
const LITERALS = [
|
|
"ON",
|
|
"OFF",
|
|
"max_speed",
|
|
"LPOS",
|
|
"JPOS",
|
|
"ENABLE",
|
|
"DISABLE",
|
|
"START",
|
|
"STOP",
|
|
"RESET"
|
|
];
|
|
|
|
return {
|
|
name: 'TP',
|
|
keywords: {
|
|
keyword: KEYWORDS,
|
|
literal: LITERALS
|
|
},
|
|
contains: [
|
|
TPDATA,
|
|
TPIO,
|
|
{
|
|
className: 'keyword',
|
|
begin: '/(PROG|ATTR|MN|POS|END)\\b'
|
|
},
|
|
{
|
|
/* this is for cases like ,CALL */
|
|
className: 'keyword',
|
|
begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
|
|
},
|
|
{
|
|
/* this is for cases like CNT100 where the default lexemes do not
|
|
* separate the keyword and the number */
|
|
className: 'keyword',
|
|
begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
|
|
},
|
|
{
|
|
/* to catch numbers that do not have a word boundary on the left */
|
|
className: 'number',
|
|
begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
|
|
relevance: 0
|
|
},
|
|
hljs.COMMENT('//', '[;$]'),
|
|
hljs.COMMENT('!', '[;$]'),
|
|
hljs.COMMENT('--eg:', '$'),
|
|
hljs.QUOTE_STRING_MODE,
|
|
{
|
|
className: 'string',
|
|
begin: '\'',
|
|
end: '\''
|
|
},
|
|
hljs.C_NUMBER_MODE,
|
|
{
|
|
className: 'variable',
|
|
begin: '\\$[A-Za-z0-9_]+'
|
|
}
|
|
]
|
|
};
|
|
}
|
|
|
|
module.exports = tp;
|