Discussion:
Sablecc Problemer
(for gammel til at besvare)
j***@jg-tech.dk
2009-04-03 12:23:41 UTC
Permalink
Hej

I øjeblikket arbejder min gruppe og jeg på at lave et
programmeringssprog. Vi benytter SableCC til at generere lexer og
parser.

Vi vil gerne implementere muligheden for strings i sproget men det
volder nogle problemer. Neden for har jeg vedhæftet Helpers og Tokens
fra vores sprog.

Problemet ligger i at strings gerne skulle kunne indeholde alle tegn.
Men hvis vi definerer en helper som:
all_chars = [0 .. 65535];

og et token:
stringliteral = all_chars*;

så vil SableCC pludselig ikke parser noget som helst af en test fil vi
har lavet. Den stopper ved aller første tegn og siger at det er noget
andet end den regnede med!

Vi kan ikke rigtig finde fejlen. Fejlen opstår selv om stringliteral
slet ikke bruges i en produktion!

Mvh
Jonas
-----

Helpers
letter = ['a'..'z']|['A'..'Z'];
blankchars = ' ' | ' ' | 11 | 12 | 10 | 13;
zero = '0';
nonzerodigit = ['1' .. '9'];
digit = zero | nonzerodigit;
alphanum = letter | digit;

Tokens
/* separators */

semi = ';';
comma = ',';
l_par = '(';
r_par = ')';
l_curly = '{';
r_curly = '}';
doublequote = 34;
singlequote = 39;
dot = '.';

// keywords
agent = 'agent';
action = 'action';
func = 'func';
return = 'return';
if = 'if';
telseif = 'elseif';
telse = 'else';
while = 'while';
for = 'for';
true = 'true';
false = 'false';

// types
bool = 'bool';
int = 'int';
string = 'string';
void = 'void';

// operators
assign = '=';
plus = '+';
minus = '-';
mult = '*';
div = '/';
mod = '%';
power = '^';
greaterthan = '>';
lesserthan = '<';
greaterequal = '>=';
lesserequal = '<=';
equal = '==';
notequal = '!=';
and = '&&';
or = '||';

// whitespace
blank = blankchars+;

// identifier
identifier = letter alphanum*;

// literals
integerliteral = digit | nonzerodigit digit*;

Ignored Tokens
blank;
Martin M. S. Pedersen
2009-04-03 18:52:54 UTC
Permalink
Post by j***@jg-tech.dk
Hej
I øjeblikket arbejder min gruppe og jeg på at lave et
programmeringssprog. Vi benytter SableCC til at generere lexer og
parser.
Vi vil gerne implementere muligheden for strings i sproget men det
volder nogle problemer. Neden for har jeg vedhæftet Helpers og Tokens
fra vores sprog.
Problemet ligger i at strings gerne skulle kunne indeholde alle tegn.
all_chars = [0 .. 65535];
Nu kender jeg ikke Sablecc, men kun flex og bison,
men all_chars er vel [0 ... 255] og ikke 65535 ?!

/Martin
j***@jg-tech.dk
2009-04-04 10:33:27 UTC
Permalink
Post by Martin M. S. Pedersen
Post by j***@jg-tech.dk
Hej
I øjeblikket arbejder min gruppe og jeg på at lave et
programmeringssprog. Vi benytter SableCC til at generere lexer og
parser.
Vi vil gerne implementere muligheden for strings i sproget men det
volder nogle problemer. Neden for har jeg vedhæftet Helpers og Tokens
fra vores sprog.
Problemet ligger i at strings gerne skulle kunne indeholde alle tegn.
all_chars = [0 .. 65535];
Nu kender jeg ikke Sablecc, men kun flex og bison,
men all_chars er vel [0 ... 255] og ikke 65535 ?!
/Martin
Det har vi også prøvet og det resulterer i samme problem. Det er som
om når den regel bliver indsat så ændres et eller andet totalt i
parseren som "ødelægger" det hele.

Loading...