Дата релиза & версия:
Модель:
Совместимость:
Производитель:
Разрядность:
Размер:
Внимание! Перед установкой драйвера рекомендуется удалить его старую версию. Удаление драйвера особенно важно при замене оборудования или перед установкой новых версий драйверов видеокарты.

I would love to convert this code to C# and drop the python dependency required to run this file in my python embedded interpreters, the main file is located here:

https://github.com/Elskom/Els_kom_new/blob/master/Tools/komformat.py

This would allow me to reduce build time by not:

  1. Cloning cpython branch 3.6
  2. Building branch 3.6
  3. Doing frequent git pull on branch 3.6 requiring an rebuild of python before building my code.

All of this would greatly reduce not only the compile time I get locally but also in AppVeyor CI.

I am also even debating an plugin system where people can even plug into this and detatch all of the things related to packing and unpacking these from the core, and load them and only invoke them when the file is detected that said plugin works for said file. This would even make maintenence time even more easier.

Also does this support python 3.x?

1>------ Build started: Project: pytocs, Configuration: Release Any CPU ------
1>E:\Users\Elsword\Desktop\pytocs\src\Translate\StatementTranslator.Tests.cs(1308,7,1308,13): error CS1024: Preprocessor directive expected
1>E:\Users\Elsword\Desktop\pytocs\src\Translate\StatementTranslator.Tests.cs(1332,7,1332,13): error CS1024: Preprocessor directive expected
1>E:\Users\Elsword\Desktop\pytocs\src\Translate\StatementTranslator.Tests.cs(1335,7,1335,14): error CS1024: Preprocessor directive expected
1>E:\Users\Elsword\Desktop\pytocs\src\Translate\StatementTranslator.Tests.cs(1366,3,1366,7): error CS1024: Preprocessor directive expected
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  01.06.07 13:57
Оценка:

3 (1)

#if false
/*
#bugaga
*/
#endif

Выдает:

error CS1024: Preprocessor directive expected

В стандарте написано следующее:

9.5.4 Conditional compilation directives
….
The remaining conditional-sections, if any, are processed as skipped-sections: except for pre-processing
directives, the source code in the section need not adhere to the lexical grammar; no tokens are generated
from the source code in the section; and pre-processing directives in the section shall be lexically correct but
are not otherwise processed
.


Re: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  01.06.07 14:01
Оценка:

Здравствуйте, nikov, Вы писали:

N>

N>#if false
N>/*
N>#bugaga
N>*/
N>#endif
N>

N>Выдает:

N>

N>error CS1024: Preprocessor directive expected
N>



N>В стандарте написано следующее:


N>

N>9.5.4 Conditional compilation directives
N>….
N>The remaining conditional-sections, if any, are processed as skipped-sections: except for pre-processing
N>directives, the source code in the section need not adhere to the lexical grammar; no tokens are generated
N>from the source code in the section; and pre-processing directives in the section shall be lexically correct but
N>are not otherwise processed.


Re[2]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  01.06.07 14:02
Оценка:

хотя да, даже валидный #if не пропускается. странные коментарии в с#


Re[3]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  01.06.07 14:06
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>хотя да, даже валидный #if не пропускается. странные коментарии в с#

а, ну да… он же не валиден

вот так все в порядке

#if true
/*asdasdasd
#if false
*/
#endif


Re: Продолжаю непонимать компилятор

От:

lonli

Беларусь
 
Дата:  01.06.07 14:59
Оценка:

Здравствуйте, nikov, Вы писали:

Да забей ты

«Чтобы все знать интернет нафик не нужен! НУжен утюг!» ©сб. БГУ

Критикессы — амазонки в климаксе. ©Ф.Раневская


Re: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  04.06.07 07:58
Оценка:

Здравствуйте, nikov, Вы писали:

N>

N>#if false
N>/*
N>#bugaga
N>*/
N>#endif
N>

N>Выдает:

N>

N>error CS1024: Preprocessor directive expected
N>



N>В стандарте написано следующее:


N>

N>9.5.4 Conditional compilation directives
N>….
N>The remaining conditional-sections, if any, are processed as skipped-sections: except for pre-processing
N>directives, the source code in the section need not adhere to the lexical grammar; no tokens are generated
N>from the source code in the section; and pre-processing directives in the section shall be lexically correct but
N>are not otherwise processed
.



Компилятор в данном случае соотвествует стандарту. Многострочный комментарий, тот что со звездочками, не имеет эффект в skipped-секциях и обрабатывается как последовательность входных символов, а не как единый токен-комментарий. Поэтому когда компилятор встречает #bugaga внутри skipped-секции он его пытается обработать как директиву препроцессора. В общем, поздравляю тебя. Ты нашел пример который демонстрирует то как C# по разному обрабатывает многострочный комментарий.


Re[2]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 08:03
Оценка:

Здравствуйте, Алексей., Вы писали:

А>Компилятор в данном случае соотвествует стандарту. Многострочный комментарий, тот что со звездочками, не имеет эффект в skipped-секциях и обрабатывается как последовательность входных символов, а не как единый токен-комментарий. Поэтому когда компилятор встречает #bugaga внутри skipped-секции он его пытается обработать как директиву препроцессора.

Про комментарии я понимаю. Но в стандарте написано, что директивы препроцессора в skipped-секции не обрабатываются, если они не являются лексически корректными. Иначе получилось бы, что текст внутри skipped-секции, случайно начинающийся с #, будет вызывать ошибку (что мы и наблюдаем).


Re[3]: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  04.06.07 08:19
Оценка:

Здравствуйте, nikov, Вы писали:

N>Про комментарии я понимаю. Но в стандарте написано, что директивы препроцессора в skipped-секции не обрабатываются, если они не являются лексически корректными. Иначе получилось бы, что текст внутри skipped-секции, случайно начинающийся с #, будет вызывать ошибку (что мы и наблюдаем).

Хм. Похоже ты прав. Невнимательно я прочитал выделенную фразу.


Re[3]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  04.06.07 08:32
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Алексей., Вы писали:


А>>Компилятор в данном случае соотвествует стандарту. Многострочный комментарий, тот что со звездочками, не имеет эффект в skipped-секциях и обрабатывается как последовательность входных символов, а не как единый токен-комментарий. Поэтому когда компилятор встречает #bugaga внутри skipped-секции он его пытается обработать как директиву препроцессора.


N>Про комментарии я понимаю. Но в стандарте написано, что директивы препроцессора в skipped-секции не обрабатываются, если они не являются лексически корректными. Иначе получилось бы, что текст внутри skipped-секции, случайно начинающийся с #, будет вызывать ошибку (что мы и наблюдаем).

простите, а как вы перевели фразу?

except for pre-processing directives, the source code in the section need not adhere to the lexical grammar

и эту?

and pre-processing directives in the section shall be lexically correct but are not otherwise processed


Re[4]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 09:44
Оценка:

-1

Здравствуйте, Ovl, Вы писали:

Ovl>простите, а как вы перевели фразу?

Ovl>

except for pre-processing directives, the source code in the section need not adhere to the lexical grammar

код в этой секции, за исключением директив препроцессора, не обязан придерживаться [правил] грамматики


Ovl>и эту?

Ovl>

and pre-processing dirctives in the section shall be lexically correct but are not otherwise processed

директивам препроцессора в этой секции следует быть лексически правильными, иначе они не будут обработаны


Re[5]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  04.06.07 09:46
Оценка:

23 (2)

Ovl>>простите, а как вы перевели фразу?
Ovl>>

except for pre-processing directives, the source code in the section need not adhere to the lexical grammar


N>

код в этой секции, за исключением директив препроцессора, не обязан придерживаться [правил] грамматики



угу

Ovl>>и эту?

Ovl>>

and pre-processing dirctives in the section shall be lexically correct but are not otherwise processed



N>

директивам препроцессора в этой секции следует быть лексически правильными, иначе они не будут обработаны



директивам препроцессора в этой секции следует быть лексически правильными, кроме этого они никак не обработываются


Re[6]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 09:50
Оценка:

Здравствуйте, Ovl, Вы писали:

N>>

директивам препроцессора в этой секции следует быть лексически правильными, иначе они не будут обработаны


Ovl>директивам препроцессора в этой секции следует быть лексически правильными, кроме этого они никак не обработываются

Спасибо, я согласен. Мой перевод был неверным.
Однако, #bugaga — это не директива препроцессора, и она не обязана быть лексически правильной.


Re[7]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  04.06.07 09:53
Оценка:

N>Однако, #bugaga — это не директива препроцессора, и она не обязана быть лексически правильной.

директива — это последовательность #<слово> если перед ним до начала строки ничего нет


Re[8]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 09:55
Оценка:

Здравствуйте, Ovl, Вы писали:

N>>Однако, #bugaga — это не директива препроцессора, и она не обязана быть лексически правильной.


Ovl>директива — это последовательность #<слово> если перед ним до начала строки ничего нет

Откуда это следует?
Я ориентируюсь на следующее определение:

pp-directive::
  pp-declaration
  pp-conditional
  pp-line
  pp-diagnostic
  pp-region
  pp-pragma


Re[6]: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  04.06.07 10:00
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>>>

and pre-processing dirctives in the section shall be lexically correct but are not otherwise processed


N>>

директивам препроцессора в этой секции следует быть лексически правильными, иначе они не будут обработаны



Ovl>директивам препроцессора в этой секции следует быть лексически правильными, кроме этого они никак не обработываются

Спасибо за перевод. Значит компилятор и я все-таки правы.


Re[8]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 10:09
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>директива — это последовательность #<слово> если перед ним до начала строки ничего нет

Компилятор выдает ошибку и на таком коде:

#if false
#
#endif

, где никакого слова нет.


Re[9]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  04.06.07 10:12
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


N>>>Однако, #bugaga — это не директива препроцессора, и она не обязана быть лексически правильной.


Ovl>>директива — это последовательность #<слово> если перед ним до начала строки ничего нет


N>Откуда это следует?

N>Я ориентируюсь на следующее определение:

N>

N>pp-directive::
N>  pp-declaration
N>  pp-conditional
N>  pp-line
N>  pp-diagnostic
N>  pp-region
N>  pp-pragma
N>

верно. это правильные директивы.
а списка неправильных там разве не приведено?

A pre-processing directive always occupies a separate line of source code and always begins
with a # character and a pre-processing directive name. White space may occur before the # character
and between the # character and the directive name.


Re[10]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 10:14
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>а списка неправильных там разве не приведено?


Ovl>

Ovl>A pre-processing directive always occupies a separate line of source code and always begins
Ovl>with a # character and a pre-processing directive name. White space may occur before the # character
Ovl>and between the # character and the directive name.

Хорошо, давайте сначала рассмотрим, как с этим согласуется такой случай: http://rsdn.ru/forum/message/2513089.1.aspx


Re[9]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  04.06.07 10:19
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


Ovl>>директива — это последовательность #<слово> если перед ним до начала строки ничего нет


N>Компилятор выдает ошибку и на таком коде:


N>

N>#if false
N>#
N>#endif
N>

N>, где никакого слова нет.

нету. об этом вам компилятор и говорит. что-нибудь типа «directive expected»


Re[10]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  04.06.07 11:02
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>нету. об этом вам компилятор и говорит. что-нибудь типа «directive expected»

В общем, ситуация понятна. Если внутри skipped-секции встречается строка, первый непробельный символ в которой — #, то эта строка должна содержать корректную директиву препроцессора, иначе возникает ошибка компиляции. Я бы не сказал, что эта мысль ясно выражена в стандарте.


Re[10]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 07:43
Оценка:

Здравствуйте, Ovl, Вы писали:

Хорошо, с первым вопросом вроде бы разобрались. А здесь что не так?

#if A && B || C
#endif
error CS1025: Single-line comment or end-of-line expected


Re[10]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 07:51
Оценка:

Здравствуйте, Ovl, Вы писали:

И еще:

#if @this
#endif
error CS1517: Invalid preprocessor expression

Это странно, учитывая, что:

conditional-symbol::
  identifier
  Any keyword except true or false

identifier::
  available-identifier
  @ identifier-or-keyword

available-identifier::
  An identifier-or-keyword that is not a keyword


Re[11]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 09:05
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


N>Хорошо, с первым вопросом вроде бы разобрались. А здесь что не так?


N>

N>#if A && B || C
N>#endif
N>


N>

N>error CS1025: Single-line comment or end-of-line expected
N>

посмотрите пункт 2.5.2 (Pre-processing expressions). pp-or-expression может стоять только перед pp-and-expression.
поэтому так — работает

#if C || B && A
#endif


Re[11]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 09:15
Оценка:

1 (1)

откуда это у вас? в спецификации для C#1.2 написано

identifier:
  available-identifier
  @ identifier-or-keyword

available-identifier:
  An identifier-or-keyword that is not a keyword

identifier-or-keyword:
  identifier-start-character   identifier-part-characters[opt]

conditional-symbol:
  Any identifier-or-keyword except true or false


Re[12]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 09:16
Оценка:

N>>

N>>error CS1025: Single-line comment or end-of-line expected
N>>

есть ещё выход — использовать скобки для явного указания приоритетов


Re[12]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 10:03
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>откуда это у вас? в спецификации для C#1.2 написано

Ovl>

Ovl>conditional-symbol:
Ovl>  Any identifier-or-keyword except true or false
Ovl>

У меня Ecma-334, C# Language Specification, 4th Edition / June 2006.
Посмотрел в майкрософтовский вариант — действительно, в этом месте расхождение.


Re[12]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 10:13
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>посмотрите пункт 2.5.2 (Pre-processing expressions). pp-or-expression может стоять только перед pp-and-expression.

Смотрел. Где это там такое написано?


Re[13]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 11:16
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


Ovl>>откуда это у вас? в спецификации для C#1.2 написано

Ovl>>

Ovl>>conditional-symbol:
Ovl>>  Any identifier-or-keyword except true or false
Ovl>>


N>У меня Ecma-334, C# Language Specification, 4th Edition / June 2006.

N>Посмотрел в майкрософтовский вариант — действительно, в этом месте расхождение.

странно, что в варианте от макрософта стоит вот это. значит у них не полный conform

C# is standardized by ECMA International as the ECMA-334 standard and by ISO/IEC as the ISO/IEC 23270 standard. Microsoft’s C# compiler for the .NET Framework is a conforming implementation of both of these standards.


Re[13]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 11:19
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


Ovl>>посмотрите пункт 2.5.2 (Pre-processing expressions). pp-or-expression может стоять только перед pp-and-expression.


N>Смотрел. Где это там такое написано?

неправильно выразился. если есть и то и другое, то or нужно поместить впереди

pp-expression:
  whitespace[opt] pp-or-expression whitespace[opt]

pp-or-expression:
  pp-and-expression
  pp-or-expression whitespace[opt] ||   whitespace[opt] pp-and-expression

pp-and-expression:
  pp-equality-expression
  pp-and-expression whitespace[opt] && whitespace[opt] pp-equality-expression

ps. взято из варианта MS


Re[14]: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  05.06.07 14:55
Оценка:

+1

Здравствуйте, Ovl, Вы писали:

Ovl>неправильно выразился. если есть и то и другое, то or нужно поместить впереди


Ovl>

Ovl>pp-expression:
Ovl>  whitespace[opt] pp-or-expression whitespace[opt]

Ovl>pp-or-expression:
Ovl>  pp-and-expression
Ovl>  pp-or-expression whitespace[opt] ||   whitespace[opt] pp-and-expression

Ovl>pp-and-expression:
Ovl>  pp-equality-expression
Ovl>  pp-and-expression whitespace[opt] && whitespace[opt] pp-equality-expression
Ovl>


Ovl>ps. взято из варианта MS

Не согласен.
Следуя вышеприведенной грамматике

#if A && B || C
#endif

корректно.


Re[14]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 15:01
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>странно, что в варианте от макрософта стоит вот это. значит у них не полный conform

Да, я замечал у них некоторые мелкие расхождения.
С первого взгляда кажется, что то же самое сформулировано другими словами, но если присмотреться, видно, что семантика чуть-чуть меняется.


Re[15]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 15:26
Оценка:

Здравствуйте, Алексей., Вы писали:

А>Здравствуйте, Ovl, Вы писали:


Ovl>>неправильно выразился. если есть и то и другое, то or нужно поместить впереди


Ovl>>

Ovl>>pp-expression:
Ovl>>  whitespace[opt] pp-or-expression whitespace[opt]

Ovl>>pp-or-expression:
Ovl>>  pp-and-expression
Ovl>>  pp-or-expression whitespace[opt] ||   whitespace[opt] pp-and-expression

Ovl>>pp-and-expression:
Ovl>>  pp-equality-expression
Ovl>>  pp-and-expression whitespace[opt] && whitespace[opt] pp-equality-expression
Ovl>>


Ovl>>ps. взято из варианта MS


А>Не согласен.

А>Следуя вышеприведенной грамматике

А>

А>#if A && B || C
А>#endif
А>


А>корректно.

как вы разобъете выражение «A && B || C» согласно правилу для pp-expression?


Re[16]: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  05.06.07 16:44
Оценка:

+1

Здравствуйте, Ovl, Вы писали:

Ovl>как вы разобъете выражение «A && B || C» согласно правилу для pp-expression?

Вот так. Использовал _ для выравнивания.

____________pp-expression
___________pp-or-expression
pp-or-expression ____ pp-and-expression
pp-and-expression ____ pp-and-expression
____ A && B _____ || ______ C ________


Re[17]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 16:55
Оценка:

-1

Здравствуйте, Алексей., Вы писали:

А>Здравствуйте, Ovl, Вы писали:


Ovl>>как вы разобъете выражение «A && B || C» согласно правилу для pp-expression?


А>Вот так. Использовал _ для выравнивания.


А>____________pp-expression

А>___________pp-or-expression
А>pp-or-expression ____ pp-and-expression
А>pp-and-expression ____ pp-and-expression
А>____ A && B _____ || ______ C ________

pp-or-expression это
pp-or-expression || pp-and-expression

поэтому слева может быть только pp-or-expression, а в случае «A && B || C» это будет pp-and-expression

1. «A && B || C» -> первые два члена сворачиваются в pp-and-expression
2. «pp-and-expression || C» -> для этого правила уже нет, поэтому компилятор ожидает только однострочный комментарий либо еще «&& pp-and-expression»


Re[18]: Продолжаю непонимать компилятор

От:

Алексей.

 
Дата:  05.06.07 17:11
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>pp-or-expression это

Ovl>pp-or-expression || pp-and-expression

Ovl>поэтому слева может быть только pp-or-expression, а в случае «A && B || C» это будет pp-and-expression


Ovl>1. «A && B || C» -> первые два члена сворачиваются в pp-and-expression

Ovl>2. «pp-and-expression || C» -> для этого правила уже нет, поэтому компилятор ожидает только однострочный комментарий либо еще «&& pp-and-expression»

С может быть и and-expression и or-expression и pp-expression

Смотри на грамматику:

pp-expression:
whitespace[opt] pp-or-expression whitespace[opt]

pp-or-expression:
pp-and-expression

pp-and-expression:
pp-equality-expression

Спорить дальше на эту тему не буду. Просто рекомендую почитать что-нибудь про грамматики.


Re[19]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  05.06.07 17:24
Оценка:

Здравствуйте, Алексей., Вы писали:

А>Здравствуйте, Ovl, Вы писали:

Ovl>>pp-or-expression это

Ovl>>pp-or-expression || pp-and-expression

Ovl>>поэтому слева может быть только pp-or-expression, а в случае «A && B || C» это будет pp-and-expression


Ovl>>1. «A && B || C» -> первые два члена сворачиваются в pp-and-expression

Ovl>>2. «pp-and-expression || C» -> для этого правила уже нет, поэтому компилятор ожидает только однострочный комментарий либо еще «&& pp-and-expression»

А>С может быть и and-expression и or-expression и pp-expression


А>Смотри на грамматику:


А>pp-expression:

А> whitespace[opt] pp-or-expression whitespace[opt]

А>pp-or-expression:

А> pp-and-expression
А> …

А>pp-and-expression:

А> pp-equality-expression
А> …

А>Спорить дальше на эту тему не буду. Просто рекомендую почитать что-нибудь про грамматики.

вот спасибо за умную мысль. надо было и мне так ответить в самом начале и не тратить время на разговор.

а может все-таки объясните, где я не прав:

1. A && B || C
2. conditional-symbol && conditional-symbol || conditional-symbol
3. pp-primary-expression && pp-primary-expression || pp-primary-expression
4. pp-unary-expression && pp-unary-expression || pp-unary-expression
5. pp-equality-expression && pp-equality-expression || pp-equality-expression
6. pp-and-expression && pp-equality-expression || pp-equality-expression
7. pp-and-expression || pp-equality-expression

и вот тут я не могу найти правила для превращения шага 7 в pp-or-expression.

подскажите пожалуйста?


Re[20]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 18:58
Оценка:

10 (1)

Здравствуйте, Ovl, Вы писали:

Ovl>1. A && B || C

Ovl>2. conditional-symbol && conditional-symbol || conditional-symbol
Ovl>3. pp-primary-expression && pp-primary-expression || pp-primary-expression
Ovl>4. pp-unary-expression && pp-unary-expression || pp-unary-expression
Ovl>5. pp-equality-expression && pp-equality-expression || pp-equality-expression
Ovl>6. pp-and-expression && pp-equality-expression || pp-equality-expression
Ovl>7. pp-and-expression || pp-equality-expression

8. pp-or-expression || pp-equality-expression
9. pp-or-expression || pp-and-expression
10. pp-or-expression
11. pp-expression


Re[14]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  05.06.07 19:01
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>ps. взято из варианта MS

В этом пункте, к счастью, расхождений нет.


Re[21]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  06.06.07 07:44
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


Ovl>>1. A && B || C

Ovl>>2. conditional-symbol && conditional-symbol || conditional-symbol
Ovl>>3. pp-primary-expression && pp-primary-expression || pp-primary-expression
Ovl>>4. pp-unary-expression && pp-unary-expression || pp-unary-expression
Ovl>>5. pp-equality-expression && pp-equality-expression || pp-equality-expression
Ovl>>6. pp-and-expression && pp-equality-expression || pp-equality-expression
Ovl>>7. pp-and-expression || pp-equality-expression

N>8. pp-or-expression || pp-equality-expression

N>9. pp-or-expression || pp-and-expression
N>10. pp-or-expression
N>11. pp-expression

мне почему-то пришло в голову что компилятор будет стараться использовать правила в первую очередь с максимальным расширением, то есть

pp-or-expression:
  pp-and-expression

это синоним

pp-or-expression:
  pp-and-expression new-line


Re[22]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  06.06.07 10:17
Оценка:


Re[23]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  06.06.07 10:18
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


N>Отправил фидбек в Microsoft: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=281585

N>Посмотрим, что скажут.

будем ждать.
на блоге выложишь или сюда?


Re[24]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  06.06.07 10:30
Оценка:

Здравствуйте, Ovl, Вы писали:

Ovl>будем ждать.

Ovl>на блоге выложишь или сюда?

Наверное, сюда.


Re[24]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  07.06.07 07:27
Оценка:

Здравствуйте, Ovl, Вы писали:

N>>Отправил фидбек в Microsoft: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=281585

Ovl>будем ждать.

Уже пофиксили.


Re[25]: Продолжаю непонимать компилятор

От:

Ovl

Россия
 
Дата:  07.06.07 09:46
Оценка:

Здравствуйте, nikov, Вы писали:

N>Здравствуйте, Ovl, Вы писали:


N>>>Отправил фидбек в Microsoft: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=281585

Ovl>>будем ждать.

N>Уже пофиксили.

к сожалению пока только во второй бете орки


Re[26]: Продолжаю непонимать компилятор

От:

nikov

США
http://www.linkedin.com/in/nikov
Дата:  07.06.07 09:49
Оценка:

Здравствуйте, Ovl, Вы писали:

N>>Уже пофиксили.


Ovl>к сожалению пока только во второй бете орки

Да, патч не высылают.

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Пройдите тест, узнайте какой профессии подходите

Для кого эта статья:

  • Python-разработчики, ищущие информацию о модуле urllib
  • Студенты и начинающие программисты, изучающие сетевое программирование
  • Профессионалы, работающие с API и веб-сервисами, которым нужно освоить стандартные библиотеки Python

    Модуль urllib в Python — ключ к миру сетевого программирования, позволяющий разработчикам отправлять HTTP-запросы и обрабатывать ответы без привлечения сторонних библиотек. В отличие от популярных requests или aiohttp, urllib входит в стандартную библиотеку Python, что делает его незаменимым инструментом в арсенале каждого разработчика. Независимо от того, парсите ли вы веб-страницы, интегрируетесь с API или разрабатываете сетевое приложение, понимание urllib даст вам фундаментальные навыки для эффективной работы с HTTP-протоколом. 🔍

Хотите быстро освоить работу с urllib и другими инструментами веб-разработки на Python? Обучение Python-разработке от Skypro — ваш путь к мастерству! На курсе вы не просто изучите теорию HTTP-запросов, а сразу примените знания в реальных проектах под руководством практикующих разработчиков. Вы научитесь профессионально работать с API, создавать веб-сервисы и парсеры — навыки, которые моментально повысят вашу ценность на рынке труда.

Основы модуля urllib: структура и компоненты

Модуль urllib в Python — это не один монолитный инструмент, а целое семейство модулей, каждый из которых отвечает за определённую функциональность при работе с URL и HTTP-протоколом. Понимание этой структуры — первый шаг к эффективному использованию библиотеки. 🧩

Рассмотрим основные компоненты urllib:

  • urllib.request — модуль для открытия и чтения URL. Позволяет отправлять HTTP-запросы, работать с заголовками и cookies.
  • urllib.parse — инструменты для разбора URL на компоненты, построения URL из компонентов и преобразования параметров.
  • urllib.error — определяет классы исключений, возникающих в пакете urllib.
  • urllib.robotparser — обеспечивает единственный класс RobotFileParser для анализа файлов robots.txt.

Чтобы начать работу с urllib, достаточно импортировать нужные модули:

Такая модульная структура позволяет импортировать только те компоненты, которые вам нужны для конкретной задачи, не загружая лишние зависимости.

Одно из преимуществ urllib перед сторонними библиотеками — его универсальность и доступность в любой установке Python без дополнительных зависимостей. Это делает модуль идеальным выбором для небольших скриптов, системных утилит и проектов, где критично минимальное количество внешних зависимостей.

Однако с этой мощью приходит и определённая сложность — API urllib менее интуитивный, чем у популярных альтернатив типа requests. Но усилия, потраченные на его изучение, окупаются глубоким пониманием механики HTTP-запросов и возможностью тонкой настройки сетевого взаимодействия.

Иван Соколов, Python-разработчик со стажем 8 лет

Когда я только начинал работать с веб-скрапингом, решил использовать популярную библиотеку requests. Всё шло гладко до тех пор, пока мне не пришлось развернуть проект на старом сервере компании, где было невозможно установить дополнительные пакеты. Пришлось срочно переписывать весь код на urllib. Это был болезненный, но ценный опыт, заставивший меня глубже изучить стандартную библиотеку. С тех пор для небольших проектов я всегда начинаю с urllib — это избавляет от лишних зависимостей и проблем совместимости при развёртывании. Особенно полезным оказался модуль urllib.parse для работы с параметрами URL, который даёт гораздо больше контроля, чем аналогичные инструменты в requests.

Базовые GET-запросы с urllib.request в Python

GET-запросы — наиболее распространённый тип HTTP-запросов, используемый для получения данных с сервера. Модуль urllib.request предоставляет функцию urlopen(), которая является основным инструментом для выполнения таких запросов. 🌐

Простейший GET-запрос выглядит следующим образом:

Этот код отправляет GET-запрос на сайт example.com, получает ответ и читает содержимое страницы. По умолчанию функция urlopen() возвращает объект, похожий на файл, который можно читать строка за строкой или весь сразу методом read().

Для более сложных сценариев, требующих настройки заголовков или других параметров запроса, следует использовать класс Request:

Такой подход позволяет настраивать заголовки запроса, что часто необходимо при работе с веб-сервисами и API.

Для передачи параметров в URL используется модуль urllib.parse:

Функция urlencode() преобразует словарь с параметрами в строку запроса, корректно обрабатывая специальные символы.

При работе с GET-запросами важно обрабатывать возможные ошибки:

Здесь мы перехватываем два типа исключений: URLError (возникает при проблемах с сетевым соединением) и HTTPError (возникает при ошибках HTTP-протокола, например, 404 Not Found).

Для работы с защищенными ресурсами, требующими базовой аутентификации, можно использовать следующий подход:

Этот код создаёт менеджер паролей, добавляет учётные данные, создаёт обработчик для базовой аутентификации и устанавливает его как глобальный обработчик для всех запросов.

Мария Волкова, ведущий разработчик backend-сервисов

На одном из проектов мне досталась задача по интеграции с API погодного сервиса для отображения прогноза в мобильном приложении. Бюджет был ограничен, поэтому использование платных API-клиентов исключалось. Я решила реализовать интеграцию на чистом urllib. Самой сложной частью оказалась не сама отправка запросов, а корректная обработка различных форматов ответов и ошибок. Погодный API мог вернуть JSON с данными, JSON с сообщением об ошибке или HTTP-ошибку с пустым телом.

Создав надёжную обёртку вокруг urllib, которая корректно обрабатывала все эти случаи и преобразовывала ответы в удобные для использования объекты, я не только решила конкретную задачу, но и создала паттерн, который впоследствии использовался во всей компании для работы с внешними API. Самым ценным оказался универсальный механизм обработки ошибок, который мог интерпретировать как HTTP-коды, так и сообщения в теле ответа.

Создание и настройка POST-запросов в urllib

POST-запросы используются, когда необходимо отправить данные на сервер, например, при заполнении форм, загрузке файлов или взаимодействии с API. В отличие от GET-запросов, данные в POST передаются в теле запроса, а не в URL. 📤

Базовый POST-запрос с urllib выглядит так:

Ключевые моменты при создании POST-запросов:

  • Данные должны быть закодированы в байтовую строку (метод encode())
  • По умолчанию Request устанавливает метод POST, если параметр data не None
  • Заголовок Content-Type автоматически устанавливается как ‘application/x-www-form-urlencoded’

Для отправки данных в формате JSON необходимо изменить заголовок Content-Type и преобразовать данные соответствующим образом:

Для загрузки файлов на сервер необходимо использовать многочастные формы (multipart/form-data). Это требует дополнительной работы с заголовками и форматированием данных:

Для изменения метода запроса на что-то отличное от GET или POST, используйте параметр method:

Сравнение методов HTTP и их использования с urllib:

При работе с POST-запросами важно помнить о безопасности, особенно если вы передаете конфиденциальные данные. Всегда используйте HTTPS для защищенной передачи данных и никогда не отправляйте пароли или токены доступа в открытом виде.

Также стоит учитывать, что некоторые API и веб-серверы могут требовать дополнительной настройки заголовков, таких как Origin, Referer или специфические заголовки аутентификации, чтобы принять ваш POST-запрос.

Обработка ответов сервера и работа с данными

После успешной отправки HTTP-запроса критически важно правильно обработать полученный ответ. Модуль urllib предоставляет инструменты для извлечения и анализа информации из ответа сервера. 📊

Объект, возвращаемый функцией urlopen(), предлагает различные методы и свойства для работы с ответом:

Методы работы с содержимым ответа зависят от формата получаемых данных. Вот наиболее распространённые сценарии:

1. Обработка HTML-контента:

2. Обработка JSON-данных:

3. Сохранение бинарных данных (например, изображений):

При обработке ответов важно учитывать кодировку текстовых данных. Метод read() возвращает байтовые данные, которые нужно декодировать для получения строки:

Для эффективной обработки больших объёмов данных, лучше читать ответ частями:

При работе с API, важно учитывать возможные ошибки и правильно их обрабатывать:

Для более сложного анализа HTML-контента лучше использовать специализированные библиотеки, такие как Beautiful Soup или lxml, которые можно легко интегрировать с urllib:

Правильная обработка ответов сервера — это не только извлечение данных, но и проверка статус-кодов, заголовков и корректная интерпретация содержимого в соответствии с его типом. Это гарантирует надёжность вашего кода при работе с внешними ресурсами. 🛡️

Продвинутые техники: заголовки, cookie и обработка ошибок

Освоив базовые операции с urllib, пора перейти к продвинутым техникам, которые сделают ваши HTTP-запросы более гибкими, безопасными и устойчивыми к ошибкам. 🚀

Управление заголовками HTTP

Заголовки HTTP играют критическую роль в коммуникации между клиентом и сервером. Они позволяют передавать метаданные, настраивать поведение запросов и ответов.

Некоторые серверы блокируют запросы без правильного User-Agent, поэтому имитация браузера часто необходима для успешного выполнения запросов.

Работа с cookies

Cookies необходимы для сохранения состояния между запросами, например, для поддержания сессий авторизации. Для работы с cookies в urllib используется CookieJar:

Для сохранения cookies между сеансами программы используйте FileCookieJar:

Расширенная обработка ошибок

Продвинутая обработка ошибок включает не только перехват исключений, но и реализацию повторных попыток, таймаутов и других механизмов обеспечения надёжности:

Работа с прокси-серверами

Для обхода ограничений доступа или для анонимизации запросов можно использовать прокси-серверы:

Настройка SSL-контекста

Для работы с HTTPS-соединениями с особыми требованиями к SSL/TLS:

Сравнение методов обработки ошибок и их применения:

Использование этих продвинутых техник позволит вам создавать надёжные и эффективные сетевые приложения, способные работать в реальных условиях интернета с его непредсказуемостью, ограничениями и требованиями безопасности. 🔒

Модуль urllib в Python представляет собой фундаментальный инструмент для работы с HTTP-запросами, который должен быть в арсенале каждого разработчика. От базовых GET-запросов до сложных многопоточных скрейперов с авторизацией и обработкой ошибок — всё это доступно с использованием стандартной библиотеки. Помните, что правильное понимание HTTP-протокола и особенностей его реализации в urllib позволит вам создавать надёжные, эффективные и безопасные сетевые приложения без зависимости от сторонних библиотек.

Python 3.

Как правильно отловить все ошибки в запросах?
Скрипт обращается к Yandex XML, оттуда получаем адрес сайта. Там нас ждёт всякое: таймаут, любые неподходящие статусы (403, например).

Делал вот так, где-то советовали, но всё равно получаю ошибку 403 и скрипт крашится из-за неё (не ловится).

try:
    response = urllib.request.urlopen(url, timeout=10)
except SocketError as e:
    if e.errno != errno.ECONNRESET:
        raise  # Not error we are looking for
    return False
except urllib.error.HTTPError:
    return False
except urllib.error.URLError:
    return False
except SocketError:
    return False

except socket.timeout:
    return False

except http.client.BadStatusLine:
    return False

except http.client.IncompleteRead:
    return False

P.S.: Также, может быть, посоветуете готовую библиотеку для Python 3 для нормального получения контента по url (в nodejs есть отличный request).

Lamerok1

0 / 0 / 0

Регистрация: 31.07.2013

Сообщений: 47

31.07.2013, 11:59. Показов 4519. Ответов 9

Метки нет (Все метки)


Добрый день. Столкнулся с бедой есть элементарный скрипт который просто должен получать HTML код страницы.

Python
1
2
3
4
import lxml
import urllib.request
page = urllib.request.urlopen("http://google.ru/")
doc = lxml.html.document_fromstring(page.read())

Но он не работает.
Выдает следующую ошибку:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Traceback (most recent call last):
  File "C:/Python32/11111", line 3, in <module>
    page = urllib.request.urlopen("http://google.ru/")
  File "C:\Python32\lib\urllib\request.py", line 138, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python32\lib\urllib\request.py", line 366, in open
    response = self._open(req, data)
  File "C:\Python32\lib\urllib\request.py", line 384, in _open
    '_open', req)
  File "C:\Python32\lib\urllib\request.py", line 344, in _call_chain
    result = func(*args)
  File "C:\Python32\lib\urllib\request.py", line 1140, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "C:\Python32\lib\urllib\request.py", line 1125, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 10051] Сделана попытка выполнить операцию на сокете при отключенной сети>

скрипт написан на работе, подключение, через прокси сервер, это имеет какое-нибудь значение?
P.S. программировать только учусь,сильно не пинайте, жду вашей помощи, заранее спасибо.



0



dhxdzjbr

100 / 85 / 5

Регистрация: 06.05.2013

Сообщений: 242

31.07.2013, 12:09

Python
1
2
3
import requests
r = requests.get("http://google.ru/")
print r.content

Добавлено через 39 секунд
requests библиотека не стандартная и её нужно скачать отдельно.



1



4866 / 3288 / 468

Регистрация: 10.12.2008

Сообщений: 10,570

31.07.2013, 12:10

Сообщение от Lamerok1

это имеет какое-нибудь значение?

скрипт нужно поключать так же, как и браузер
так ошибок нет



1



0 / 0 / 0

Регистрация: 31.07.2013

Сообщений: 47

31.07.2013, 12:27

 [ТС]

Спасибо большое.
А можно более подробно узнать, как подключать скрипт?
Я в этом деле новичок и не совсем понимаю.

Добавлено через 12 минут
dhxdzjbr, А как ее скачать, что то я не могу разобраться, зашел на http://docs.python-requests.or… ribute-pip и что там делать не пойму.
P.S. мне стыдно, что не знаю такие элементарные вещи.



0



dhxdzjbr

100 / 85 / 5

Регистрация: 06.05.2013

Сообщений: 242

31.07.2013, 12:34

Вот так вот можно работать через прокси

Python
1
2
3
4
5
6
7
8
9
10
11
http_proxy  = "10.10.1.10:3128"
https_proxy = "10.10.1.11:1080"
ftp_proxy   = "10.10.1.10:3128"
 
proxyDict = { 
              "http"  : http_proxy, 
              "https" : https_proxy, 
              "ftp"   : ftp_proxy
            }
 
r = requests.get(url, headers=headers, proxies=proxyDict)

Добавлено через 2 минуты
Вот описание установки, в принцепи все просто, если будут вопросы пиши) http://docs.python-requests.or… l/#install



1



0 / 0 / 0

Регистрация: 31.07.2013

Сообщений: 47

31.07.2013, 15:24

 [ТС]

Все получилось, спасибо
А как я могу узнать свой ip адрес HTTP, HTTPS, FTP прокси?



0



100 / 85 / 5

Регистрация: 06.05.2013

Сообщений: 242

31.07.2013, 15:30

А как у тебя на работе осуществляется выход в интернет?
Теоретически можно посмотреть в настроках сетевой карты.



0



0 / 0 / 0

Регистрация: 31.07.2013

Сообщений: 47

31.07.2013, 15:35

 [ТС]

Через прокси сервер.



0



100 / 85 / 5

Регистрация: 06.05.2013

Сообщений: 242

31.07.2013, 15:40

Все это уже слышали и я прекрасно помню, что ты это говорил. Вопрос состоял в другом, ну да ладно, уже не важно.
Зайди в настройки сетевой карты, в пункте который я обвёл должен быть написан адрес шлюза через который ты выходишь в интернет.

Миниатюры

 



0



4866 / 3288 / 468

Регистрация: 10.12.2008

Сообщений: 10,570

31.07.2013, 16:11

можно открыть какую-нибудь страницу и посмотреть через netstat



0



Любой драйвер для вашего ПК
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии