FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Operator precedence
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: Operator precedence [message #185030 is a reply to message #185028] Mon, 24 February 2014 21:45 Go to previous messageGo to previous message
Jerry Stuckle is currently offline  Jerry Stuckle
Messages: 2598
Registered: September 2010
Karma:
Senior Member
On 2/24/2014 4:23 PM, Ben Bacarisse wrote:
> Jerry Stuckle <jstucklex(at)attglobal(dot)net> writes:
>
>> On 2/23/2014 11:49 PM, Ben Bacarisse wrote:
>>> Jerry Stuckle <jstucklex(at)attglobal(dot)net> writes:
>>>
>>>> On 2/23/2014 6:36 PM, Richard Damon wrote:
>>>> > On 2/23/14, 4:34 PM, Jerry Stuckle wrote:
>>>> >> On 2/23/2014 2:42 PM, GS wrote:
>>>> >>> This shows one of the major problems with PHP: there is no formal
>>>> >>> language
>>>> >>> definition, you have to go by examples in the help file to intuit what is
>>>> >>> or is not valid. Where is the BNF definition of the language? There is
>>>> >>> none
>>>> >>> AFAICT.
>>>> >>>
>>>> >> Incorrect. There is a formal definition, as indicated in the doc at
>>>> >> www.php.net.
>>>> >>
>>>> > Do you have a pointer to where "expression" is precisely defined (other
>>>> > than reading code).
>>>>
>>>> Try any Introduction to Programming book. Documentation (not just
>>>> PHP) does not normally define commonly used terms.
>>>
>>> I don't think it's that clear cut. Expressions are built from
>>> operators, but is ',' an operator in PHP? It appears in the operator
>>> precedence table but it isn't an operator in an sense that would
>>> normally be understood by someone familiar with these terms.
>>
>> It is an operator, as indicated by its appearance in the table of
>> operators. Operators are not limited to +-*/.
>
> I am familiar with languages that have a ',' operator, which is why I
> brought it up. Normally, combining expressions with an operator makes a
> new expression, but that's not true in PHP for the comma. For example,
> f() and g() are expressions, but (f(), g()) is not. That's why,
> presumably, there is no description of what it does in the section on
> operators -- it isn't one!
>

Documentation indicates what you CAN do - not what you CAN'T do. This
is true of languages, databases, spreadsheets and about anything else
around.

> <snip>
>>>> > The lack of formal rigor says that there are some questions which just
>>>> > can't be answered by reading the language documentation.
>>>>
>>>> It can if you have a basic understanding of programming.
>>>
>>> Again, I don't think it's that simple. How would you determine if the
>>> following program is permitted and, if it is, what it does?
>>>
>>> if (false) label: else echo "else\n";
>>> goto label;
>>>
>>> You could try it, of course, but that's hardly very formal.
>>
>> What language gives every possible way for you to screw up your
>> programming?
>
> You seemed to be disagreeing with the statement that there are some
> questions which just can't be answered by reading the language
> documentation. All I was doing was giving an example of a question I
> could not answer from the documentation.
>

See above.

> I agree it's very much a corner case (and many not worth an answer) but
> there are other such questions. For example, from the documentation
> alone I can't explain why ($i++, $j++) is not a valid expression, given
> that it appears to consist of brackets and operators and variables, all
> put together in the usual way.
>

See above. Also, this is PHP, not C or C++.

>> If you want to find out how some screwed-up code works in ANY
>> language, you try it and find out.
>
> That's a flawed method. If I have an algorithm that shifts bits about,
> but sometimes shifts them *all* out, how can I be sure what
>
> 1 << PHP_INT_SIZE*8
>
> really does? If I test it, and it does what I want, can I be sure that
> on some other hardware it will do the same? Does PHP define the
> meaning of this expression, or does it leave it open (and possibly up to
> what the hardware does)?
>

That is how you test anything. And you can NEVER be sure that ANY
operation will work the same when you change compilers/interpreters.
You need to be looking at the documentation for the software you're
using, not something else.

For instance a 32 bit C compiler will have different results than a 64
bit C compiler, even if both are run on a 64 bit machine. And even
different 32 bit C compilers can have different output. For instance,
in a 32 bit C compiler, an int can be 8, 16, or 32 bits long - all
within the specs (which only states the length of an int is >= the
length of a short, and <= the length of a long). So it is entirely
possible one C compiler will have a 16 bit int, while another has a 32
bit int. And both are within the C spec.

And on 64 bit hardware, an int could be 64 bits long.

> <snip>
>>> The assignment operators in PHP have, in effect, different precedences
>>> on the left and the right (a feature that some languages flaunt) but
>>> that is not common and certainly not part of what I'd call basic
>>> knowledge. The documentation gives one example of this peculiarity, but
>>> that does not clear the matter up conclusively. For example, in some
>>> languages permit assignment to the result of a conditional expression,
>>> but I think it's hard to tell from the documentation what these two do:
>>>
>>> $bool ? $a : $b = 42;
>>> ($bool ? $a : $b) = 42;
>>
>> Show me what language provides you with examples of every possible
>> combination of operators and expressions.
>
> I never suggested otherwise. However, in more rigorously defined
> languages you can find out what combinations are permitted from the
> specification. With PHP, I often end up just trying things because I
> can't find the answer in the documentation. I then assume that what
> happens now is what will always happen -- i.e. that the reference
> implementation is the specification.
>

The PHP doc shows you what combinations are permitted. You are asking
about what is NOT permitted.

>>> The operator precedence table suggests that both mean the same thing,
>>> but they don't. I don't think the meaning of either is easily
>>> determined from the documentation.
>>>
>>> <snip>
>>>
>> So you try it out, as you do in any language. But just because you
>> can come up with some weird combination of operators which isn't
>> listed in the doc does not mean the language is not rigorously
>> defined.
>
> I think that's exactly what it means.
>

Fine. Go ahead and document every possible bad combination of
operators. I won't wait up for your results.

>> But it does mean you are trolling.
>
> Eh? This whole thread is an interesting technical discussion about the
> degree to which PHP programs are well-defined. If you really think my
> contributions are trolling, you know the well-worn advice: don't feed
> me.
>

You claim you understand why things which can't be done are not
documented. Then you argue because what you want to try is not
documented, and denigrate PHP because it doesn't follow YOUR definition
of "rigorously defined".

What else would you call it?



--
==================
Remove the "x" from my email address
Jerry Stuckle
jstucklex(at)attglobal(dot)net
==================
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Correlating curl resources to some other object.
Next Topic: Experienced Web designer required
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Fri May 10 15:53:22 GMT 2024

Total time taken to generate the page: 0.05484 seconds