# Build the parser
main_env.CFile('source/lex.yy.c', 'source/lexer.l')
-main_env.Program('parser', FileList['source/*.c'] + ['source/lex.yy.c'] + runtime_libs)
+parser_srcs = (FileList['source/*.c'] + ['source/lex.yy.c']).uniq
+main_env.Program('parser', parser_srcs + runtime_libs)
#------------------------------------------------------------------------------
# Test Build Targets
#------------------------------------------------------------------------------
if Opts[:profile].include? "test"
-# compiler_libs = ['build/lib/libparse-test.a'] + runtime_libs
-# test_env.Library('build/lib/libparse-test.a', FileList['source/libparse/*.c'])
-# test_env.Program('build/bin/sclpl-test', FileList['source/sclpl/*.c'] + compiler_libs)
-# test_env.Command('RSpec', [], 'CMD' => [
-# 'rspec', '--pattern', 'spec/**{,/*/**}/*_spec.rb', '--format', 'documentation'])
+ # Do nothing for now
end
static void expression(void) {
keyword_send();
- optional(END);
+ optional(PERIOD);
}
static void keyword_send(void) {
switch (Current) {
case ID: shift_reduce(ID, 0u); push_reduce(UNARY_MSG, 1); break;
case NUM: shift_reduce(NUM, 0u); break;
- case SELF: shift_reduce(SELF, 0u); break;
case STRING: shift_reduce(STRING, 0u); break;
- case BOOL: shift_reduce(BOOL, 0u); break;
+ case SYMBOL: shift_reduce(SYMBOL, 0u); break;
case CHAR: shift_reduce(CHAR, 0u); break;
case LBRACK: array(); break;
case LBRACE: object(); break;
static void array(void) {
int count = 0;
expect(LBRACK);
- if (!accept(RBRACK)) {
- do {
- optional(COMMA);
- expression();
- count++;
- } while(accept(COMMA));
+ while (!accept(RBRACK)) {
+ expression();
+ count++;
}
expect(RBRACK);
push_reduce(ARRAY, count);
static void hashmap(void) {
int count = 0;
expect(ALBRACE);
- if (!accept(RBRACE)) {
- do {
- optional(COMMA);
- shift_reduce(STRING, 0);
- expect(COLON);
- expression();
- push_reduce(PAIR, 2);
- count++;
- } while(accept(COMMA));
+ while (!accept(RBRACE)) {
+ shift_reduce(STRING, 0);
+ expect(COLON);
+ expression();
+ push_reduce(PAIR, 2);
+ count++;
}
expect(RBRACE);
push_reduce(HASHMAP, count);
{
int count = 0;
expect(ALBRACK);
- if (!accept(RBRACK)) {
- do {
- optional(COMMA);
- expression();
- count++;
- } while(accept(COMMA));
+ while (!accept(RBRACK)) {
+ expression();
+ count++;
}
expect(RBRACK);
push_reduce(HASHSET, count);