私は自分の言語を Pegjs で書いています。いつものように、私の言語には、、、、などのtrue
キーワードfalse
がif
ありelse
ますtoday
。今、変数を宣言したいのですが、変数名を予約済みのキーワードにすることはできないようです。language キーワードを除いて、任意の英字の後に英数字を続けることができます。
私は次のことを行いました(Pegjs Onlineでテスト可能):
variable = c:(alpha alphanum*)
{
var keywords = ["true", "false", "if", "else", "today"];
var res = c[0]
for (var i = 0; i<c[1].length; i++) {
res=res+c[1][i]
}
if(keywords.indexOf(res)>=0) {
return error('\'' + res + '\'' + ' is a keyword and cannot be used as a variable name.');
}
return { 'dataType' : 'variable', 'dataValue' : res };
}
alpha = [a-zA-Z]
alphanum = [a-zA-Z0-9_]
boolean = v: ("true" / "false")
{
return { 'dataType' : 'boolean', 'dataValue': v};
}
今true
は違法ですが、true1
そうではありません。これで問題ありません。しかし、boolean
自分の言語の別の場所で構造を定義したので、定義内の許可されていないキーワードを手動で再定義する代わりに、その定義を再利用することはできませんvariable
か?
私のソリューションがエラーを起こしやすい理由を想像できます。私はいくつかのことを試しましたが、うまくいきませんでした。
ご協力いただきありがとうございます!