だから私は最近、プロジェクト用に独自の関数型プログラミング言語を完成させ、javascript にトランスコンパイルする言語のコードミラー モードを作成したいと考えています。そのためのトークナイザーを作成しましたが、codemirror がトークナイザーを構造化する方法を理解できません。これは、言語の基本構造です。
<FUNCTION>(<ARGUMENT 1>, <ARGUMENT 2>....)
nested functions:
<FUNCTION 1>(<FUNCTION 2>(<ARGUEMNT 1>), <ARGUMENT 1>....)
series of functions:
<FUNCTION>(<ARGUMENT 1>, <ARGUMENT 2>...), <FUNCTION>()
strings:
`this is a string`
comments:
;this is a comment;
そのため、関数、引数、コンマ、文字列、およびコメントのみが含まれます。
これは、これまでのモードで私が持っているものです:
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("diff", function() {
var TOKEN_NAMES = {
'(': 'positive',
')': 'negative',
',': 'comma',
';': 'comment',
'`': 'strings',
};
return {
token: function(stream) {
var tw_pos = stream.string.search(/[\t ]+?$/);
if (!stream.sol() || tw_pos === 0) {
stream.skipToEnd();
return ("error " + (
TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');
}
var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();
if (tw_pos === -1) {
stream.skipToEnd();
} else {
stream.pos = tw_pos;
}
return token_name;
}
};
});
CodeMirror.defineMIME("text/x-mylang", "mylang");
});
これまでのところ機能していません。誰かが私を正しい方向に向けたり、このような言語のモードがどのように機能するかを示すことができれば、非常に役立ちます.