Как разрешить сдвиг/уменьшить конфликт для жадных модификаторов в грамматике дерева для VB.NET?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить сдвиг/уменьшить конфликт для жадных модификаторов в грамматике дерева для VB.NET?

Сообщение Anonymous »

Я разрабатываю грамматику дерева для VB.NET и сталкиваюсь с постоянной проблемой анализа с объявлениями участников, которые имеют несколько модификаторов. Паризер не может быть «жадным» и потребляет только первый модификатор, неверно истолляя второй модификатор в качестве имени переменной. В грамматике.
Проблема
Учитывая простой класс vb.net, парсер должен правильно обрабатывать поля как с помощью одиночных, так и с множественными модификаторами. PrettyPrint-Override ">

Код: Выделить всё

Public Class MyTestClass
' This line with a single modifier parses correctly.
Private _someField As String

' This line with multiple modifiers fails.
Private ReadOnly _anotherField As Integer
End Class
При анализе линии Private Readonly _Anotherfield как Integer , анализатор неправильно останавливается после частного и пытается проанализировать чтения как имя поля. Линия сбоя выглядит так, четко показывая ошибку < /p>

Код: Выделить всё

(field_declaration
(modifiers
(member_modifier)  -- "Private"
)
(variable_declarator
(identifier)       -- "ReadOnly"
)
(ERROR)              -- "_anotherField As Integer"
)

Правило модификаторов не жадное, и создается узел ошибки .
Соответствующий фрагмент грамматики (

Код: Выделить всё

grammar.js
)
Вот ключевые правила из моей граммамы. JS , которые участвуют в этом выпуске.

Код: Выделить всё

module.exports = grammar({
name: 'vbnet',
// ... other rules and extras

rules: {
// ...

member_modifier: $ => choice(
ci('Public'), ci('Private'), ci('Protected'), ci('Friend'),
ci('Protected Friend'), ci('Private Protected'), ci('ReadOnly'),
ci('WriteOnly'), ci('Shared'), ci('Shadows'), ci('MustInherit'),
ci('NotInheritable'), ci('Overrides'), ci('MustOverride'),
ci('NotOverridable'), ci('Overridable'), ci('Overloads'),
ci('WithEvents'), ci('Widening'), ci('Narrowing'),
ci('Partial'), ci('Async'), ci('Iterator')
),

modifiers: $ => repeat1($.member_modifier),

_type_member_declaration: $ => choice(
// ... other members like empty_statement, inherits_statement
prec(2, $.constructor_declaration),
prec(1, $.method_declaration),
prec(1, $.property_declaration),
// ... other members with precedence
$.field_declaration // Lower precedence
),

field_declaration: $ => seq(
optional(field('attributes', $.attribute_list)),
field('modifiers', $.modifiers),
commaSep1($.variable_declarator),
$._terminator
),

variable_declarator: $ => seq(
field('name', $.identifier),
optional($.array_rank_specifier),
optional($.as_clause),
optional(seq('=', field('initializer', $._expression)))
),

// ... other rules
}
});

function ci(keyword) {
return new RegExp(keyword.split('').map(letter => `[${letter.toLowerCase()}${letter.toUpperCase()}]`).join(''));
}
// ... other helpers

Вопрос
Как я могу изменить эту грамматику дерева-ситтеров, чтобы правильно и «жадно», все еще правильно распределяет амбиг-подряд между различными типами декларации (например, код. method_declaration )?

Подробнее здесь: https://stackoverflow.com/questions/796 ... sitter-gra
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить доступ к грамматике из построителя запросов?
    Гость » » в форуме Php
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Правильный порядок математических выражений в грамматике PEG
    Anonymous » » в форуме Php
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Почему прослушиватель ошибок не вызывается из-за недопустимого токена в моей грамматике antlr4?
    Гость » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Гость
  • Мой файл scala не соответствует грамматике Scala.g4 ANTLR
    Anonymous » » в форуме JAVA
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Как мне использовать const в грамматике ниже?
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»