## core functions
#include <getopt.h>
- static char Usage[] = "Usage: oceani --trace --print --noexec --brackets"
- "--section=SectionName prog.ocn\n";
+ static char Usage[] =
+ "Usage: oceani --trace --print --noexec --brackets --section=SectionName prog.ocn\n";
static const struct option long_options[] = {
{"trace", 0, NULL, 't'},
{"print", 0, NULL, 'p'},
char *section = NULL;
struct parse_context context = {
.config = {
- .ignored = (1 << TK_line_comment)
- | (1 << TK_block_comment)
- | (1 << TK_mark),
+ .ignored = (1 << TK_mark),
.number_chars = ".,_+- ",
.word_start = "_",
.word_cont = "_",
###### includes
#include <gmp.h>
- #include "string.h"
- #include "number.h"
+ #include "parse_string.h"
+ #include "parse_number.h"
###### libs
myLDLIBS := libnumber.o libstring.o -lgmp
$*binode
Block -> Open Statementlist Close ${ $0 = $<2; }$
| Open SimpleStatements } ${ $0 = reorder_bilist($<2); }$
- | : SimpleStatements $$NEWLINE ${ $0 = reorder_bilist($<2); }$
- | : Statementlist $$NEWLINE ${ $0 = $<2; }$
+ | : SimpleStatements ${ $0 = reorder_bilist($<2); }$
+ | : Statementlist $$OUT ${ $0 = $<2; }$
Statementlist -> ComplexStatements ${ $0 = reorder_bilist($<1); }$
| Newlines ComplexStatements ${ $0 = reorder_bilist($<2); }$
$0->left = NULL;
$0->right = $<1;
}$
- | SimpleStatements ; ${ $0 = $<1; }$
SimpleStatementLine -> SimpleStatements NEWLINE ${ $0 = $<1; }$
+ | SimpleStatements ; NEWLINE ${ $0 = $<1; }$
| SimpleStatementLine NEWLINE ${ $0 = $<1; }$
SimpleStatement -> pass ${ $0 = NULL; }$
case Xcond_statement: free_cond_statement(cast(cond_statement, e)); break;
###### ComplexStatement Grammar
- | CondStatement ${ $0 = $<1; }$
+ | CondStatement $$NEWLINE ${ $0 = $<1; }$
###### Grammar
$0->elsepart = $<3;
var_block_close(c, CloseElse);
}$
+ | else OpenScope SimpleStatements NEWLINE ${
+ $0 = new(cond_statement);
+ $0->elsepart = reorder_bilist($<3);
+ var_block_close(c, CloseElse);
+ }$
| else OpenScope CondStatement ${
$0 = new(cond_statement);
$0->elsepart = $<3;
$*exec
// These scopes are closed in CondSuffix
- ForPart -> for OpenScope SimpleStatements ${
+ ForPart -> for OpenScope SimpleStatements ; ${
+ $0 = reorder_bilist($<3);
+ }$
+ | for OpenScope SimpleStatements NEWLINE ${
$0 = reorder_bilist($<3);
}$
| for OpenScope Block ${
}$
| ForPart NEWLINE ${ $0 = $<1; }$
- ThenPart -> then OpenScope SimpleStatements ${
+ ThenPart -> then OpenScope SimpleStatements ; ${
+ $0 = reorder_bilist($<3);
+ var_block_close(c, CloseSequential);
+ }$
+ | then OpenScope SimpleStatements NEWLINE ${
$0 = reorder_bilist($<3);
var_block_close(c, CloseSequential);
}$
$0.thenpart = $<5;
var_block_close(c, CloseParallel);
}$
+ | if OpenScope Expression OpenScope then Block ${
+ $0.type = Xcond_statement;
+ $0.condpart = $<3;
+ $0.thenpart = $<6;
+ var_block_close(c, CloseParallel);
+ }$
+ | if OpenScope Expression OpenScope then SimpleStatements ; ${
+ $0.type = Xcond_statement;
+ $0.condpart = $<3;
+ $0.thenpart = reorder_bilist($<6);
+ var_block_close(c, CloseParallel);
+ }$
+ | if OpenScope Expression OpenScope then SimpleStatements NEWLINE ${
+ $0.type = Xcond_statement;
+ $0.condpart = $<3;
+ $0.thenpart = reorder_bilist($<6);
+ var_block_close(c, CloseParallel);
+ }$
| if OpenScope Block then OpenScope Block ${
$0.type = Xcond_statement;
$0.condpart = $<3;
print "", list[i],
print
+ if 1 == 2 then print "yes"; else print "no"
+
bob:fred
bob.name = "Hello"
bob.alive = (bob.name == "Hello")