j***@jg-tech.dk
2009-04-03 12:23:41 UTC
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;
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;