Я сейчас пытаюсь разобрать визуальные основы c и преобразовать их в javascript с помощью jison. У меня есть набор классов узлов, например:
class Base {} // base node that almost every other node extends of
class Literal extends Base {} // NumberLiteral, StringLiteral all those classes extending Literal class
class Value extends Base {
constructor(base, params) {
this.base = base;
this.params = params;
}
}
Для объявления грамматики я использую вспомогательную функцию:
const grammar = {
Identifier: [
o('IDENTIFIER', function () {
return new IdentifierLiteral($1);
}),
],
VarDeclaration: [
o('Identifier AS TYPE', function () {
return new Value($1, { type: $3 });
}),
],
}
Это мой текущий подход к обработке типов, но в В таких ситуациях, как я узнаю, какого типа это должно быть?
const grammar = {
Value: [
o('Literal', function () {
return new Value($1);
}),
],
};
Так что я считаю, что мой подход не очень хорош. Может быть, мне нужно создать отдельный узел для типа?
class Type extends Base {
constructor(type) {
this.type = type;
}
}
И добавить его к каждому литеральному классу? Или, может быть, есть лучший подход?