Здравствуйте, Иванков Дмитрий, Вы писали:
ИД>Я правильно понимаю, что запрос на доступ к svn можно прямо сюда оставить?
Для получения SVN логина надо сгенерировать хеш пароля здесь, а затем послать запрос в письме вместе с сгенерированным хешем админу проекта Michal Moskal [malekith A T nemerle.org]. После получения доступа добавьте себя и свою контактную информацию в список разработчиков здесь: http://nemerle.org/svn/nemerle/trunk/misc/users.
ИД>Править планирую лексер, а также залить раскраску для фара.
ie>Планируешь поддерживать 5-ый colorer?
В перспективе — да. но для этого надо пробраться через новый синтаксис hrc.
Попробовал включить сразу 4ever и 5, работает в принципе , но иногда один из них открывает не предназначенный ему тип файлов (автоопределение по первой строке видимо виновато)
Здравствуйте, Иванков Дмитрий, Вы писали:
ИД>На багтрекере лежит парочка багов: ИД>
ИД>#define
ИД>System.Console.WriteLine("not ");
ИД>System.Console.WriteLine("skipped");
ИД>#if true==true!=true
ИД>System.Console.WriteLine("It's true expr");
ИД>#endif
ИД>#if (true==true!=true) //error: unbalanced parenthesis
ИД>#endif
ИД>//following is illegal in c#, but ncc compiles it
ИД>#if 1
ИД>#region q
ИД>#endif
ИД>#endregion
ИД>()
ИД>
Замечательно. Это действительно ошибка. Но то что ты сделал это никуда не годится.
Камил совершенно прав. Использование option[] в лексере совершенно не допустимо. option[] — это ссылочный тип данных.
К тому же ты уничтожил предыдущую логику которая ничем не отличалась ктоме того что не имела пробем с производительностью.
Прежде чем вносить такие правки (и вообще лезть в кишки компилятора) надо сто раз подумать и посоветоваться с окружающими. Иначе компилятор быстро прийдет в негодность.
В общем, откати свой peek_or_none() и пользуйся peek(). В случае конца файла peek() возвращает '\0'. Вот его и проверяй.
ЗЫ
Чтобы подобных проблем не возникало надо исходить из следующей позиции:
1. Те кто писал компилятор не идиоты и делали все осознанно.
2. Если что-то кажется неосознанным, то в соответствии с п. 1 имеет смысл предположить, что ты что-то не знаешь/упустил из виду. Стало быть нужно спросить у авторов кода почему что-то сделано так, а не иначе.
3. Вносить изменения только при условии, что в них нет ни малейшего соменения и ты полностью понимаешь что делал ты и твои предшественники.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Камил совершенно прав. Использование option[] в лексере совершенно не допустимо. option[] — это ссылочный тип данных.
Согласен, копаю в сторону других типов
VD>В общем, откати свой peek_or_none()
Уже
VD> и пользуйся peek(). В случае конца файла peek() возвращает '\0'. Вот его и проверяй.
Вот это как раз проблема, он возвращает '\0' и в случае если в тексте есть такой символ
Здравствуйте, Иванков Дмитрий, Вы писали:
VD>> и пользуйся peek(). В случае конца файла peek() возвращает '\0'. Вот его и проверяй. ИД>Вот это как раз проблема, он возвращает '\0' и в случае если в тексте есть такой символ
Интересно, а как в этом случае ведёт себя C#?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Иванков Дмитрий, Вы писали:
VD>> и пользуйся peek(). В случае конца файла peek() возвращает '\0'. Вот его и проверяй. ИД>Вот это как раз проблема, он возвращает '\0' и в случае если в тексте есть такой символ
'\0' — это недопустимый символ в текстовом файле. Его не может быть в принципе. На то и рассчет.
'\0' == 0 :> char.
Так что смело проверяй на него. Это самое быстрое и простое решение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
IT>>Интересно, а как в этом случае ведёт себя C#?
VD>Ты о чем? Все символы со значением меньше пробела недопустимы в текствых файлах. '\0' — априори некорректный символ для текстового файла.
И как себя в этом случае ведёт C#?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Если в середине файла встречается 0?
То это будет бинарный файл. Разумность рассуждений сродни скармливанию компилятору C# вместо .cs-файла .exe-файл.
В общем, откровенно говоря бредовое обсуждение получается.
Сказа ли же '\0' не является разрешенным текстовым сиволом. Значит в корректном тексовом файле он встретится не может. Ну, а не кореектные никого волновать не должны.
Ладно. Специльно для неверующих...
Создал C#-проект.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("A$B");
}
}
}
далее открыл бинарным редктором этот файл и исправил смвол обозначенный как '$' на '\0'. Записал и попытался скомпилировать проект. Результат:
Здравствуйте, VladD2, Вы писали:
VD>Все символы со значением меньше пробела недопустимы в текствых файлах. '\0' — априори некорректный символ для текстового файла.
Здравствуйте, IT, Вы писали:
IT>Что и требовалось доказать, правильно? Только если бы это было сделано сразу, то и флейма не понадобилось бы и был бы дан однозначный ответ на вопрос.
У меня такой вопрос даже не возникал.
Может лучше было бы если свои предполжения проверяли бы те у кого они возникают?
ЗЫ
Вообще-то можно было бы воспользоваться старым С-шным подходом и использовать в функциях чтения не char, а int. Тогда бы для признака конца файла можно было бы использовать -1 (как в StreamReader.Read()). Но при этом было бы неудобно смореть (в отладчике) на значение символа.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.