Avatar billede nemezis_aalborg Nybegynder
11. marts 2004 - 12:20 Der er 1 kommentar og
1 løsning

SableCC EBNF compiler-compiler problem

Hej eksperter,

jeg leger med et program til at generere compilere med kaldet SableCC. Det benytter en EBNF lignende syntax.
Jeg vil have lexeren og parseren til at genkende noget allá (problemet ligger i Productions-delen):
/*********************************************************
Config {

    start (Classname, funcname):

    dependencies {
        define (ClassA):
        define (ClassB):
        define (ClassC):
    }

    options {
        optimization (cpu):
    }

}
*********************************************************/

Har indtil videre lavet følgende:
Helpers

    ht = 0x09; lf = 0x0a; ff = 0x0c; cr = 0x0d; sp = 0x20;
    line_terminator = (lf | cr | cr lf);

    ascii_character = [0..0xff];
    not_star = [ascii_character - '*'];
    not_star_slash = [not_star - '/'];
    ascii_caps = ['A'..'Z'];
    ascii_small = ['a'..'z'];
    digit = ['0'..'9'];

Tokens

    l_brace = '{';
    r_brace = '}';
    l_parenthese = '(';
    r_parenthese = ')';
    colon = ':';
    comma = ',';

    config = 'Config';
    start = 'start';
    object = ascii_caps (ascii_small | ascii_caps)*;
    function = ascii_small (ascii_small | ascii_caps)*;
    dependencies = 'dependencies';
    define = 'define';
    options = 'options';
    directive = ascii_small (ascii_small | ascii_caps)*;
    value = (digit '.' digit digit) | ascii_small+;

    whitespace = (sp | ht | ff | line_terminator)*;
    comment = '/*' not_star* '*'+ (not_star_slash not_star* '*'+)* '/';

Ignored Tokens

    whitespace,
    comment;

Productions
    ast = config l_brace p_config* r_brace;

    p_config =
        {p_start} p_start |
        {p_dependencies} p_dependencies |
        {p_options} p_options;

    p_start = start l_parenthese object comma function r_parenthese colon;

    p_dependencies = dependencies l_brace p_define* r_brace;

    p_define = define l_parenthese object r_parenthese colon;

    p_options = options l_brace p_directive* r_brace;

    p_directive = directive l_parenthese value r_parenthese colon;
Avatar billede nemezis_aalborg Nybegynder
11. marts 2004 - 12:22 #1
Problemet kommer lige som en kommentar, for at gøre det lidt mere overskueligt.. :)

Problemet er at den åbenbart kun kan genkende kode som:
Config {
    start (Classname, funcname):
}

Den kan altså åbenbart ikke genkende flere ting... please help! :/
Avatar billede nemezis_aalborg Nybegynder
15. marts 2004 - 20:22 #2
Lukker nu :) Problemet lå i at | og * gælder for alt til højre for tegnet..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

KMD A/S

Udvikler

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps

Politiets Efterretningstjeneste

Tech lead for AI og machine learning i PET