Re: help: defining grammer?
[email protected] ("Ron D. Smith") Tue, 26 Oct 2004 11:30:06 -0700
| Newsgroups | perl.recdescent |
|---|---|
| Message-ID | <[email protected]> |
What you want to do "is hard" as a generic solution and you will find lots
and lots of literature on program translation.
That being said, you should break this up into a two step process, step one
is to parse the "generic language" (which looks an *awful* lot like perl...
:-) into a data structure which encapsulates a generic view of the
constructs. A second step takes that data structure and produces the
appropriate output.
For example, "$var = 10"
assignment:
lhs "=" expression
lhs:
scalar | array | hash
scalar:
/\$[\w]+/
expression:
{whole expression tree}
...
atom
...
atom:
constant
...
constant:
string_constant | integer
integer:
/[-+]?\d+/
Once you have the data structure, you can look at it and to produce scheme,
the program will see that you are doing an assign of a variable to a constant
and emit the "Define var1 = 10" string etc.
This really is two problems and each one should be though out separately.
On Monday, Oct 25, 2004 "Prentice, Phillip R" said:
> Hello,
>
> =20
>
> I was wondering if anyone could help me begin to write some grammer for
> a conversion project. I basically have a generic language where
> variables, arrays, and hash's are defined. I want these variables to be
> translated to a tool specific datastructure, i.e TCL, scheme, etc. I am
> assuming I would have to create a different set of grammar(s) for each
> language I want the variables translated to. However, I am having
> trouble defining the grammar for parsing the genericLanguange. Could
> you help me get started by showing me how I would go about parsing the
> below 3 structures in the GenericLangauge section below. I would
> appreciate any insight or suggestions.
>
> =20
>
> Thanks in advance,
>
> -Phillip
>
> =20
>
> e.g. for example
>
> =20
>
> __GenericLanguage__
>
> =20
>
> $var =3D 10
>
> $var1 =3D "variable1"
>
> @var2 =3D [1,2,3]
>
> %var3 =3D {'key1'=3D>'value1', 'key2'=3D>'value2}
>
> =20
>
> __Translate-to-SchemeLanguage__
>
> =20
>
> Define var1 =3D variable1
>
> Define var2 =3D '(1 2 3)
>
> ...
>
> =20
>
> __Translate-to-TCLLanguage__
>
> =20
>
> Set var1 variable
>
> =20
>
>
> ------_=_NextPart_001_01C4BAE7.C2C3FB0C--
--
Intel, Corp.
5000 W. Chandler Blvd.
Chandler, AZ 85226
--
Intel, Corp.
5000 W. Chandler Blvd.
Chandler, AZ 85226