Pegged, From EBNF to PEG

bls bizprac at orange.fr
Mon Mar 12 06:45:58 PDT 2012


On 03/13/2012 04:28 AM, Dmitry Olshansky wrote:
> On 12.03.2012 16:43, bls wrote:
>> On 03/10/2012 03:28 PM, Philippe Sigaud wrote:
>>> Hello,
>>>
>>> I created a new Github project, Pegged, a Parsing Expression Grammar
>>> (PEG) generator in D.
>>>
>>> https://github.com/PhilippeSigaud/Pegged
>>>
>>> docs: https://github.com/PhilippeSigaud/Pegged/wiki
>>
>> Just WOW!
>>
>> Nice to have on your WIKI would be a EBNF to PEG sheet.
>>
>> Wirth EBNF Pegged
>> A = BC. A <- B C
>> A = B|C. A <- C / C
>
> Maybe A <- B / C. And even then it's not exactly equivalent if the
> grammar was ambiguous.
> Imagine: B <- a, C <- aa
PEG is pretty new to me. Can you elaborate a bit ?
>

My mistake.. cleaned up stuff..

Pegged				Wirth EBNF

Sequence
A <- B C			A = BC.

B or C
A <- B / C			A = B|C.

Zero or one B
A <- B?				A = [B].

Zero or more Bs
A <- B*				A = {B}.

One or more Bs
A <- B+				Not available

PEG description of EBNF

EBNF <- Procuction+
Production <- Identifier '=' Expression '.'
Expression <- Term ( '|' Term)*
Term <- Factor Factor*
Factor <- Identifier / Literal / '[' Expression ']' / '{' Expression '}' 
/ '(' Expression ')'
lowerCase  <- [a-z]
upperCase  <- [A-Z]
Identifier <- (lowerCase / upperCase) (lowerCase / upperCase)*
Literal <- ("'" .+ "'") /  ('"' .+ '"')

Still not sure if this is correct. Especially :
Term <- Factor Factor*


Another thing I never really understand is the "production" order, In 
other words : Why not top down ..
Start :
lowerCase  <- [a-z]
upperCase  <- [A-Z]
Identifier <- (lowerCase / upperCase) (lowerCase / upperCase)*
....

End :
EBNF <- Procuction+

where End is Root..

TIA, Bjoern


More information about the Digitalmars-d-announce mailing list