comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Verified compilers?
Date: Thu, 08 Mar 2012 20:02:25 +0200
Date: 2012-03-08T20:02:25+02:00	[thread overview]
Message-ID: <9rsahhFmr3U1@mid.individual.net> (raw)
In-Reply-To: <1psd0g0womgxi.1sle7ol12x3d5.dlg@40tude.net>

On 12-03-07 22:17 , Dmitry A. Kazakov wrote:
> On Wed, 07 Mar 2012 19:49:04 +0200, Niklas Holsti wrote:
>
>> On 12-03-07 11:12 , Dmitry A. Kazakov wrote:
>>
>>> I was always wondering why people bother to study grammars, LR, LL parsers
>>> and other useless stuff.
>>
>> Grammars and the notion of parsing (derivations) rigorously define what
>> a given string of characters means, in some formally defined language.
>
> No. A grammar defines some formal language: a set of strings.

Ok, I was being too brief. You are right that a grammar defines a 
language. But notice that I was also speaking of parsing and 
derivations, not just grammars.

If you want to define the meanings of the sentences of a language in a 
rigorous way, you have basically two options:

1. Define the meaning operationally, by giving a standard interpreter, a 
black box, for example a Turing machine, that accepts the language, and 
define that the actions of that machine, while reading a sentence, are 
the meaning of that sentence. (From your point of view, the meaning 
could be the "translation" that appears on the output tape.)

2. Define the meaning mathematically in some way. Note that by 
"mathematically" I don't necessarily mean formally proven math, but 
mathematically precise definitions with the usual amount of hand-waving 
and shortcuts.

The first "meaning ex machina" option is very undesirable, IMO, so we 
are left with the second option. Since most languages have an infinite 
number of sentences, of unbounded length, the only practical way to 
define the meaning of a sentence is by some form of induction. Induction 
based on the length of the string works only for some simple languages, 
such as the language of integer literals -- you can define the meaning 
(value) of a single digit, and also the how the meaning changes when one 
more digit is added to a digit string. But this does not work for most 
languages we use. The only alternative left is structural induction, but 
where is the structure of a string of characters?

The structure is in the parse tree (derivation tree) defined by the 
grammar for this sentence.

As far as I know, all methods -- formal or informal -- for defining the 
meaning of sentences in formal languages are based on how the sentence 
is derived, or equivalently how it is parsed.

How else could you explain why "2*3+4*5" means 26, and not 70, nor 
something else? Rules like "do multiplication before addition" are fuzzy 
and only lead to "meaning ex machina"-like definitions.

In practice, the role of the parse/derivation tree appears in the fact 
that parser/compiler generators let you attach "semantic actions" to 
grammar productions, and often help you to consider larger parts of the 
derivation by passing information around the parse/derivation tree in 
well-defined ways. Attribute grammars are one example.

> The meaning (program language semantics) is defined informally

There are various levels of "meaning" and semantics, for example static 
semantics and dynamic semantics.

When one uses a parser/compiler generator to implement a programming 
language, the static semantics is often defined formally in the grammar 
and associated rules. The dynamic semantics is usually not, or is 
defined by a translation to some other form (intermediate or machine 
code), but even here the translation is driven and defined by the 
parse/derivation tree.

> The grammar defines only syntax.

No, it also defines the structure, through the parse/derivation tree.

> Furthermore the merits of formal grammar definitions are debatable, because
> the complexity of grammar descriptions usually make it impossible to judge
> if a given string do belong to the formal language or not.

Entirely wrong. Can you give an example of this impossibility?

> Normally BNF is all one needs to define syntax.

As was already replied, BNF (in its many forms) is a formal grammar 
description formalism.

> Maybe, but they are totally irrelevant for the grammars of real programming
> languages.

No, they are relevant. For example, you want limited look-ahead to make 
parsing fast, and for most "little languages" for which you implement a 
parser manually, you want the language to be suitable for recursive 
descent parsing.

> On one hand these classes do not capture real differences
> between syntaxes of programming languages.

What sort of "real differences" do you mean?

> On the other hand, the classes
> they do describe have no other practical interest than torturing students
> of CS classes.

I don't want to become too personal, but have you had a Horrible 
Experience with some poor formal-languages class that has left a 
permanent scar in your mind? My wife had something like that; she was 
among the first students of computer science in our university, and the 
teachers at that time were also beginners. I think most of the students 
were mystified by the course.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  parent reply	other threads:[~2012-03-08 18:02 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-21 15:42 Verified compilers? Yannick Duchêne (Hibou57)
2012-02-24  1:41 ` Shark8
2012-02-24  8:52   ` Georg Bauhaus
2012-02-24 17:36   ` Peter C. Chapin
2012-03-06  1:27 ` Randy Brukardt
2012-03-06 17:24   ` Shark8
2012-03-06 17:43     ` Dmitry A. Kazakov
2012-03-06 19:03       ` Shark8
2012-03-07  5:33       ` Yannick Duchêne (Hibou57)
2012-03-07  9:12         ` Dmitry A. Kazakov
2012-03-07 17:49           ` Niklas Holsti
2012-03-07 20:17             ` Dmitry A. Kazakov
2012-03-07 23:28               ` Usefulness of Formal Notions in Programming (was: Verified compilers?) Georg Bauhaus
2012-03-08  9:24                 ` Usefulness of Formal Notions in Programming Dmitry A. Kazakov
2012-03-08 10:30                   ` Nasser M. Abbasi
2012-03-08 12:37                     ` Dmitry A. Kazakov
2012-03-08  0:42               ` Verified compilers? Randy Brukardt
2012-03-08  9:25                 ` Dmitry A. Kazakov
2012-03-08 18:10                   ` Niklas Holsti
2012-03-08 20:41                     ` Dmitry A. Kazakov
2012-03-08 18:02               ` Niklas Holsti [this message]
2012-03-08 20:40                 ` Dmitry A. Kazakov
2012-03-09  0:44                   ` Georg Bauhaus
2012-03-09 22:13                   ` Niklas Holsti
2012-03-10 10:36                     ` Dmitry A. Kazakov
2012-03-10 20:35                       ` Niklas Holsti
2012-03-11  9:47                         ` Dmitry A. Kazakov
2012-03-11 22:22                           ` Niklas Holsti
2012-03-12  5:12                             ` Niklas Holsti
2012-03-12  9:43                             ` Dmitry A. Kazakov
2012-03-14  8:36                               ` Niklas Holsti
2012-03-14  9:24                                 ` Georg Bauhaus
2012-03-14 11:14                                   ` REAL (was: Verified compilers?) stefan-lucks
2012-03-14 12:59                                     ` REAL Dmitry A. Kazakov
2012-03-14 13:30                                       ` REAL Georg Bauhaus
2012-03-14 13:51                                         ` REAL Dmitry A. Kazakov
2012-03-14 20:37                                           ` REAL Brian Drummond
2012-03-14 21:52                                             ` REAL Dmitry A. Kazakov
2012-03-14 13:52                                         ` REAL georg bauhaus
2012-03-14 17:42                                         ` REAL Jeffrey Carter
2012-03-14 10:14                                 ` Verified compilers? Dmitry A. Kazakov
2012-03-14 20:13                                   ` Niklas Holsti
2012-03-11 10:55                         ` Georg Bauhaus
2012-03-10 13:46                     ` Brian Drummond
2012-03-07  1:00     ` Randy Brukardt
2012-03-07 12:42   ` Stuart
2012-03-08  1:06     ` Randy Brukardt
2012-03-08  9:04       ` Jacob Sparre Andersen
2012-03-08  9:37         ` Dmitry A. Kazakov
2012-03-08 11:23           ` Simon Wright
2012-03-08 12:27             ` Dmitry A. Kazakov
2012-03-08 10:23         ` Brian Drummond
2012-03-08 23:38           ` Bill Findlay
2012-03-09 13:56             ` Brian Drummond
2012-03-09 14:43               ` Shark8
2012-03-09 21:51                 ` Brian Drummond
2012-03-09 15:49               ` Bill Findlay
2012-03-09 20:34                 ` Brian Drummond
2012-03-09 19:40               ` Jeffrey Carter
2012-03-09 20:39                 ` Brian Drummond
2012-03-09 23:59               ` phil.clayton
2012-03-08 15:23         ` Peter C. Chapin
2012-03-09  2:04         ` Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox