it-source

.(C# 또는 VB에서 항상 합법적입니다.그물?

criticalcode 2023. 5. 11. 21:32
반응형

.(C# 또는 VB에서 항상 합법적입니다.그물?

시퀀스를 실행할 수 있습니까?.(C# 또는 VB에 표시됩니다. 코드 코드넷?
(문자열, 주석 또는 XML 리터럴, EDIT: 또는 전처리기 지시문이 아님)

저는 답이 아니라고 꽤 확신하지만, 확실히 하고 싶습니다.

이 있는 ..문법에 나타나는 것은 다음과 같습니다.

real-literal:
    decimal-digits   .   decimal-digits ...
    .   decimal-digits ...

namespace-or-type-name:
    namespace-or-type-name   .   identifier ...


member-access:
    primary-expression   .   identifier ...
    predefined-type   .   identifier ...

qualified-alias-member   .   identifier ...

base-access:
    base   .   identifier

unbound-type-name:
    unbound-type-name   .   identifier

qualified-identifier: 
    qualified-identifier   .   identifier

member-name:
    interface-type   .   identifier

indexer-declarator:
    type   interface-type   .   this   

규칙에서 것을 합니다.)는 제가 나머지 생산 규칙에서 벗어났다는 것을 의미합니다.)에는 이한경중어것도느우러가 ..(로서 유효한..는 숫자, 또는 " 은음숫자식별, 한자또는키유워다니입드효다키다니워▁is▁either" 뒤에 .this.

에서, C#은 a입니다.#region세그먼트를 사용하면 다음 문자를 따를 수 있습니다.

#region foo.(
// this is perfectly legal C#
#endregion

VB에서 참고합니다.영역 레이블은 유효한 문자열 리터럴이어야 하므로 따옴표가 있어야 하므로 이는 문제가 되지 않습니다.

#Region "foo.("
' quotes required
#End Region

이후에도 합법입니다.#error그리고.#warnVB에 상응하는 것이 없는 것.

하지만 가장 큰 우려는 당신이 어떤 임의의 코드를 가지고 있을 수 있다는 것입니다.#if C#: 록블에서 C#:

#if false
    foo.( perfectly legal
#endif

VB.Net에서:

#If False Then
    foo.( perfectly legal
#End If

VB 버전은 임의의 표현식을 허용하기 때문에 표현식을 평가하지 않는 한 어떤 코드가 실제로 VB인지 알 수 없습니다.다시 말해, 구문 분석만으로는 충분하지 않습니다. 여러분도 평가해야 합니다.

C# 4 B,, C# 양전버사 4.0, 의문 하는 것,.문자가 다음 행에 나타납니다.

실시간 검색:
십진수 - 십진수 - 십진수 지수 - partopt 실제 유형 - 옵션십진수 지수-partopt 실제 유형-partopt
연산자 또는 계산자: 다음 중 하나{     }     [     ]     (     )     .     ,     :     ;
네임스페이스 또는 유형 이름:
네임스페이스-or-type-name .identifier type-message-listopt
구성원 액세스:
주-표현식 . 식별자 유형 -표현식-목록 옵션prefined-type .식별자 type-prefined-listopt정규화된 회원 . 식별자.
기본 액세스:
기본. 식별자
unbound-type-name:
unbound-type-name . identifier generic-module-specifier opt
정규화된 식별자:
한정된 식별자. 식별자.
구성원 이름:
인터페이스 유형 . 식별자
인덱서-인덱스터:
type interface-type . this [form-parameter-list ]

로 로..다에진가 10수상, 식자또는 a니다옵나 뒤에 .this토큰, 그것을 가질 수 있는 유일한 방법..(는 여러 개의 퀀는다허것입을 입니다.operator-or-punctuator기호가 서로 붙어 있습니다.operator-or-punctuator확인:

토큰:연산자 또는 계산자

때부터token어휘 분석에만 사용되며, 어떤 것도 제안하지 않습니다..합법적인 다음에 a가 나옵니다.(규칙적으로

물론 그것은 여전히 댓글, 리터럴 등을 남깁니다. 왜냐하면 당신은 이미 그것들에 대해 알고 있기 때문입니다.

문법에 대한 언급도 없고 완전히 비과학적이지만, 제 추측은 이렇습니다.

.(C#(VB를 대변할 수 없음)에서 사용할 수 없습니다. NET).

댓글이나 문자열 리터럴을 제외하면, 제 생각에는. .다음과 같이 표시될 수 있습니다.

  1. 구성원 액세스 연산자. 식별자 뒤에 와야 합니다.식별자는 다음으로 시작할 수 없기 때문입니다.(이건 안 돼요.
  2. 실제 리터럴의 소수점으로, 숫자 뒤에 와야 합니다. (숫자가 아닙니다.

막으로마지,로으,.연산자는 오버로드할없으므로,foo.(bar)작동하지도 않을 것입니다.

VB 참조를 숙독한 후 VB에 대한 대답은 아니오라고 확신합니다.

는 VB 캐릭사다니용합를터는라는 합니다..내부 부동 소수점 번호 리터럴, 구성원 액세스 및 중첩된 이름 액세스의 세 가지만 사용할 수 있습니다.

하고, 한 것은 XML 리을제고멤액버뒤수것은입니다.IdentifierOrKeyword (제1.105.6항).잘 " 는매잘있어문자으며되정의된", "경다또이의식우별문자자시만수로"로 시작할 수 있습니다.[.

중첩된 이름 액세스도 마찬가지입니다(그리고 완전성을 위해).With블록 및 필드 이니셜라이저).

부동 소수점 리터럴의 경우, 다음에 적어도 하나의 숫자(§1.6.3)가 더 와야 합니다.

페이지 http://blogs.msdn.com/b/lucian/archive/2010/04/19/grammar.aspx 에서 저는 C#4와 VB10에 대한 완전한 문법 사본을 기계 판독 가능한 형식(EBNF & ANTLR)과 인간 판독 가능한 형식(HTML)으로 작성했습니다.HTML 버전에는 각 토큰에 대해 계산된 "may-follows" 집합이 포함되어 있습니다.

이에 따르면, PERIUY의 "may-follows" 집합은 C#4 또는 VB10에 LPAREN을 포함하지 않습니다.

안타깝게도 문법이 완전하지 않습니다.그럼에도 불구하고 VB/C# 팀 내에서 이러한 문법은 우리가 많은 분석을 위해 시작하는 것입니다.예를 들면...

  • VB10은 "Sub() STMT" 형식의 "한 줄 문 lambdas"를 도입했습니다. 람다 자체는 식이며, "Dim array = {Sub() STMT1, Sub() STMT2}"와 같은 목록에 나타날 수 있습니다.우리는 표현 뒤에 오는 것과 표현 뒤에 오는 것에 대한 모호성을 인식해야 했습니다.예를 들어, "z=3"이 첫 번째 또는 두 번째 Dim의 일부일 수 있기 때문에 "Dim x = Sub() Dim = 5, z = 3"은 모호합니다.

  • VB10은 C#이 소스 코드의 아무 곳에나 세미콜론을 포함하도록 허용하는 것과 다소 유사한 "암묵적 라인 연속" 기능을 도입했습니다.우리는 이것이 애매모호함을 가져올지 알아내야 했습니다.이것은 언어에서 어떤 문장의 접두사도 그 자체가 유효한 문장인지 묻는 것과 같습니다.이는 문맥이 없는 두 언어의 교차점이 비어 있는지 여부를 파악하는 것과 같습니다.일반적으로 결정할 수 없는 문제이지만, 알고리즘에 대한 추가적인 "인간의 통찰력"으로 결정할 수 있었던 VB 문법의 경우는 아닙니다.

저는 그들이 C#에 이런 것을 추가할 것이라고 생각하지 않습니다, 단지 틀려 보일 뿐입니다.

저는 VB에 대해 전혀 확신하지 못합니다.넷, 하지만 그들이 어떻게 제네릭을 했는지만 봐도, VB인 것 같습니다.넷 팀은 이런 "이상해 보이지 않는" 태도를 가지고 있지 않습니다.

따라서 향후 버전의 언어에서 사용할 수 있는 툴을 구축할 경우 VB를 주의해야 합니다.그물...

언급URL : https://stackoverflow.com/questions/5582331/is-ever-legal-in-c-sharp-or-vb-net

반응형