Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.182.179] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Разделения зависят от грамматики. |
Сообщ.
#17
,
|
|
|
Цитата Pavia @ В русском языке есть слова? А в английском есть слова? Даже в математике есть слова и в Паскале есть слова и в Форте есть слова. И в Японском тоже есть слова, хотя и без пробелов.- во всех языках есть слова. Только в русском языке смысл мало меняется от расположения. В английском языке расположение слова влияет на смысл. Именно по-этому и надо читать всё предложение, чтобы понять какой смысл оно несёт и где именно располагается. В разных ситуациях семантика разная, как и сам токен. В ANTLR для контекстно-зависимых грамматик существуют неймспейсы. Именно исходя из этих аксиом я и сделал вывод, что грамотное разделение на токены: 1) Нельзя реализовать либо без наличия полной грамматики (наличия всех правил, что, где и куда, и в каком неймспейсе находится). 2) Либо без построения и анализа AST (т.е. с глобальным неймспейсом, но постпроверками, что кейворд "class" является именно полем класса, а значит допустим). Как раз мне эту мысль, насколько я понял, и хотели донести JoeUser и прочие участники этого треда. |
Сообщ.
#18
,
|
|
|
Цитата Serafim @ приоритет на основе порядка декларации в BNF А если приоритет одинаков? Возьмем знак "<" для С++. Где его только нет, и в логических операциях, и в шаблонах, и в инклудах, и в сдвигах. Везде несет разный смысл. |
Сообщ.
#19
,
|
|
|
Цитата что всё же имеет смысл делать несколько "деревьев" Уточню: Это предложение строить сразу все возможные способы порядка токенов, определяя их в таком виде: https://github.com/antlr/grammars-v4/blob/m...va/JavaLexer.g4 А потом уже решать какой порядок из всех вариантов наиболее корректный, исходя из правил, вроде таких: https://github.com/antlr/grammars-v4/blob/m...a/JavaParser.g4 Цитата JoeUser @ Везде несет разный смысл. // "a << b" // tree: << / \ a b И проверять во время компиляции наличия перегрузки этого метода у "a". Невнимательно прочитал, сорь. |
Сообщ.
#20
,
|
|
|
Цитата Serafim @ Классическое определение этого оператора - это просто сдвиг байтов. Ты не прав Я же перечислил где это символ может встречаться, где-то он оператор, где-то часть оператора, где-то разделитель. |
Сообщ.
#21
,
|
|
|
Цитата JoeUser @ А если приоритет одинаков? Я же повторяю выводы за другими просто. В данном случае - это Pavia сказал, что таким образом можно. Вот тут: Решение конфликтов в лексическом анализе (сообщение #3749358) Цитата Можно и так. =))) Но в любом случае "<<" от "<" можно отличить как раз порядком декларации - в этом я согласен. А семантику уже с помощью правил (нетерминалов т.е.: Rule: 'include' '<' T_NAME '>') и никак иначе. |