На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Решение конфликтов в лексическом анализе
    Цитата Pavia @
    Как разделение на слова могут зависит от их порядка?

    Разделения зависят от грамматики.
      Цитата Pavia @
      В русском языке есть слова? А в английском есть слова? Даже в математике есть слова и в Паскале есть слова и в Форте есть слова. И в Японском тоже есть слова, хотя и без пробелов.- во всех языках есть слова.


      Только в русском языке смысл мало меняется от расположения. В английском языке расположение слова влияет на смысл. Именно по-этому и надо читать всё предложение, чтобы понять какой смысл оно несёт и где именно располагается. В разных ситуациях семантика разная, как и сам токен. В ANTLR для контекстно-зависимых грамматик существуют неймспейсы.

      Именно исходя из этих аксиом я и сделал вывод, что грамотное разделение на токены:
      1) Нельзя реализовать либо без наличия полной грамматики (наличия всех правил, что, где и куда, и в каком неймспейсе находится).
      2) Либо без построения и анализа AST (т.е. с глобальным неймспейсом, но постпроверками, что кейворд "class" является именно полем класса, а значит допустим).

      Как раз мне эту мысль, насколько я понял, и хотели донести JoeUser и прочие участники этого треда.
        Цитата Serafim @
        приоритет на основе порядка декларации в BNF

        А если приоритет одинаков?
        Возьмем знак "<" для С++. Где его только нет, и в логических операциях, и в шаблонах, и в инклудах, и в сдвигах.
        Везде несет разный смысл.
          Цитата
          что всё же имеет смысл делать несколько "деревьев"

          Уточню: Это предложение строить сразу все возможные способы порядка токенов, определяя их в таком виде: https://github.com/antlr/grammars-v4/blob/m...va/JavaLexer.g4
          А потом уже решать какой порядок из всех вариантов наиболее корректный, исходя из правил, вроде таких: https://github.com/antlr/grammars-v4/blob/m...a/JavaParser.g4

          Цитата JoeUser @
          Везде несет разный смысл.

          Но это, кажется, перегрузка оператора. Классическое определение этого оператора - это просто сдвиг байтов. Всё что требуется - это построить:

          ExpandedWrap disabled
            // "a << b"
             
            // tree:
              <<
             /  \
            a    b


          И проверять во время компиляции наличия перегрузки этого метода у "a".


          Невнимательно прочитал, сорь.
            Цитата Serafim @
            Классическое определение этого оператора - это просто сдвиг байтов.

            Ты не прав :) Я же перечислил где это символ может встречаться, где-то он оператор, где-то часть оператора, где-то разделитель.
              Цитата JoeUser @
              А если приоритет одинаков?

              Я же повторяю выводы за другими просто. В данном случае - это Pavia сказал, что таким образом можно. Вот тут: Решение конфликтов в лексическом анализе (сообщение #3749358)
              Цитата
              Можно и так.


              =)))

              Но в любом случае "<<" от "<" можно отличить как раз порядком декларации - в этом я согласен. А семантику уже с помощью правил (нетерминалов т.е.: Rule: 'include' '<' T_NAME '>') и никак иначе.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0239 ]   [ 15 queries used ]   [ Generated: 16.04.24, 23:31 GMT ]