www.digitalmars.com         C & C++   DMDScript  
Archives

D Programming
digitalmars.D
digitalmars.D.bugs
digitalmars.D.dtl
digitalmars.D.ide
digitalmars.D.dwt
digitalmars.D.announce
digitalmars.D.learn
digitalmars.D.debugger
D.gnu
D

C/C++ Programming
c++
c++.announce
c++.atl
c++.beta
c++.chat
c++.command-line
c++.dos
c++.dos.16-bits
c++.dos.32-bits
c++.idde
c++.mfc
c++.rtl
c++.stl
c++.stl.hp
c++.stl.port
c++.stl.sgi
c++.stlsoft
c++.windows
c++.windows.16-bits
c++.windows.32-bits
c++.wxwindows

digitalmars.empire
digitalmars.DMDScript
electronics


digitalmars.D.learn - legal identifier check

reply "Saaa" <empty needmail.com> writes:
Is there a function to check whether some string is a legal identifier? 
May 30 2009
parent reply downs <default_357-line yahoo.de> writes:
Saaa wrote:
 Is there a function to check whether some string is a legal identifier? 
 
 

Sure. static if(is(typeof({ /* code to be checked for validity goes here */ }))) ...
May 30 2009
parent reply "Saaa" <empty needmail.com> writes:
 Saaa wrote:
 Is there a function to check whether some string is a legal identifier?

Sure. static if(is(typeof({ /* code to be checked for validity goes here */ }))) ...

That is a compile time check, right? I meant a runtime check. How does that piece of code work anyways :D static if = compile time if is = comparison between two non value things? typeof = returns the type I know use this (in the ddata thread above): foreach(char c; identifier) { if( !inPattern( c, `_a-zA-Z0-9`) ) { return false; } }
May 31 2009
next sibling parent reply Daniel Keep <daniel.keep.lists gmail.com> writes:
Saaa wrote:
 ...
 
 I know use this (in the ddata thread above):
 
 foreach(char c; identifier)
 {
  if( !inPattern( c, `_a-zA-Z0-9`) )
  {
   return false;
  }
 } 

That's not correct. http://digitalmars.com/d/1.0/lex.html#identifier
May 31 2009
parent "Saaa" <empty needmail.com> writes:
 I know use this (in the ddata thread above):

 foreach(char c; identifier)
 {
  if( !inPattern( c, `_a-zA-Z0-9`) )
  {
   return false;
  }
 }

That's not correct. http://digitalmars.com/d/1.0/lex.html#identifier

It isn't extremely important as it is just a data format, but I would like to be as D as possible.
May 31 2009
prev sibling parent reply BCS <none anon.com> writes:
Hello Saaa,

 static if(is(typeof({ /* code to be checked for validity goes here */
 }))) ...
 


that checks to see if the {...} is a valid delegate literal by using is() to see if semantic checks fail.
May 31 2009
parent reply "Saaa" <empty needmail.com> writes:
 Hello Saaa,

 static if(is(typeof({ /* code to be checked for validity goes here */
 }))) ...


that checks to see if the {...} is a valid delegate literal by using is() to see if semantic checks fail.

May 31 2009
parent reply grauzone <none example.net> writes:
Saaa wrote:
 Hello Saaa,

 static if(is(typeof({ /* code to be checked for validity goes here */
 }))) ...


that checks to see if the {...} is a valid delegate literal by using is() to see if semantic checks fail.


You have to write it yourself. Here's a good starting point: http://www.digitalmars.com/d/1.0/lex.html#identifier
May 31 2009
parent reply "Saaa" <empty needmail.com> writes:
 You have to write it yourself. Here's a good starting point:
 http://www.digitalmars.com/d/1.0/lex.html#identifier

Yes, that was my starting point and it seemed quite complex, thus my question :) I think I'll stay with my simple check for now as it isn't really necessary to be as strict as D's identifiers. Just thought that if there was an easy check I'd implement that. Thanks anyways everybody.
May 31 2009
parent reply BCS <none anon.com> writes:
Hello Saaa,

 You have to write it yourself. Here's a good starting point:
 http://www.digitalmars.com/d/1.0/lex.html#identifier
 

question :) I think I'll stay with my simple check for now as it isn't really necessary to be as strict as D's identifiers. Just thought that if there was an easy check I'd implement that. Thanks anyways everybody.

if you are only working with ASCII: use the regex `_A-Za-z[_A-Za-z0-9]*`
May 31 2009
next sibling parent reply "Saaa" <empty needmail.com> writes:
 if you are only working with ASCII: use the regex `_A-Za-z[_A-Za-z0-9]*`

Is that better than the inPattern way?
May 31 2009
parent reply BCS <none anon.com> writes:
Hello Saaa,

 if you are only working with ASCII: use the regex
 `_A-Za-z[_A-Za-z0-9]*`
 


yes, it correctly rejects numbers at the start and should be faster as well.
May 31 2009
parent "Saaa" <empty needmail.com> writes:
 Hello Saaa,

 if you are only working with ASCII: use the regex
 `_A-Za-z[_A-Za-z0-9]*`


yes, it correctly rejects numbers at the start and should be faster as well.

Of course, should have looked longer at the regex line, thanks!
May 31 2009
prev sibling next sibling parent Robert Fraser <fraserofthenight gmail.com> writes:
BCS wrote:
 Hello Saaa,
 
 You have to write it yourself. Here's a good starting point:
 http://www.digitalmars.com/d/1.0/lex.html#identifier

question :) I think I'll stay with my simple check for now as it isn't really necessary to be as strict as D's identifiers. Just thought that if there was an easy check I'd implement that. Thanks anyways everybody.

if you are only working with ASCII: use the regex `_A-Za-z[_A-Za-z0-9]*`

Isn't there an isUniAlpha function in both Phoboses and in Tango?
May 31 2009
prev sibling parent reply =?ISO-8859-1?Q?=22J=E9r=F4me_M=2E_Berger=22?= <jeberger free.fr> writes:
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: quoted-printable

BCS wrote:
 Hello Saaa,
=20
 You have to write it yourself. Here's a good starting point:
 http://www.digitalmars.com/d/1.0/lex.html#identifier

question :) I think I'll stay with my simple check for now as it isn't really necessary to be as strict as D's identifiers. Just thought that if there was an easy check I'd implement that. Thanks anyways everybody.

if you are only working with ASCII: use the regex `_A-Za-z[_A-Za-z0-9]*=

=20

Jerome --=20 mailto:jeberger free.fr http://jeberger.free.fr Jabber: jeberger jabber.fr
Jun 01 2009
parent BCS <ao pathlink.com> writes:
Reply to Jérôme,

 BCS wrote:
 
 Hello Saaa,
 
 You have to write it yourself. Here's a good starting point:
 http://www.digitalmars.com/d/1.0/lex.html#identifier
 

question :) I think I'll stay with my simple check for now as it isn't really necessary to be as strict as D's identifiers. Just thought that if there was an easy check I'd implement that. Thanks anyways everybody.

`_A-Za-z[_A-Za-z0-9]*`

Jerome

Oops :(
Jun 01 2009