diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2012-01-30 08:55:14 -0700 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2012-01-30 08:55:14 -0700 |
| commit | e150ee5e1ce33b0a4913d53e5df4658ea508eb6e (patch) | |
| tree | 50014a30908cf434752943994482d22ab3e5fcbd /src | |
| parent | 22170e030efdeadc1dfbd548a8f0b24b0e10ceee (diff) | |
| download | stage-e150ee5e1ce33b0a4913d53e5df4658ea508eb6e.tar.gz stage-e150ee5e1ce33b0a4913d53e5df4658ea508eb6e.tar.bz2 stage-e150ee5e1ce33b0a4913d53e5df4658ea508eb6e.tar.xz stage-e150ee5e1ce33b0a4913d53e5df4658ea508eb6e.zip | |
Syntax updated to support options & commands.
Diffstat (limited to 'src')
| -rw-r--r-- | src/parser.l | 2 | ||||
| -rw-r--r-- | src/parser.y | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/parser.l b/src/parser.l index 7957c53..7ceee0a 100644 --- a/src/parser.l +++ b/src/parser.l | |||
| @@ -42,6 +42,7 @@ if { return tokIf; } | |||
| 42 | then { return tokThen; } | 42 | then { return tokThen; } |
| 43 | else { return tokElse; } | 43 | else { return tokElse; } |
| 44 | command { return tokCommand; } | 44 | command { return tokCommand; } |
| 45 | option { return tokOption; } | ||
| 45 | goto { return tokGoto; } | 46 | goto { return tokGoto; } |
| 46 | not { return tokNot; } | 47 | not { return tokNot; } |
| 47 | setup { return tokSetup; } | 48 | setup { return tokSetup; } |
| @@ -49,6 +50,7 @@ enter { return tokEnter; } | |||
| 49 | and { return tokAnd; } | 50 | and { return tokAnd; } |
| 50 | or { return tokOr; } | 51 | or { return tokOr; } |
| 51 | return { return tokReturn; } | 52 | return { return tokReturn; } |
| 53 | ignore { return tokIgnore; } | ||
| 52 | 54 | ||
| 53 | true { yylval->bValue = true; return tokBool; } | 55 | true { yylval->bValue = true; return tokBool; } |
| 54 | false { yylval->bValue = false; return tokBool; } | 56 | false { yylval->bValue = false; return tokBool; } |
diff --git a/src/parser.y b/src/parser.y index 2aff29c..e127627 100644 --- a/src/parser.y +++ b/src/parser.y | |||
| @@ -58,11 +58,13 @@ void yyerror( YYLTYPE *llocp, yyscan_t yyscanner, GameBuilder &, const char *err | |||
| 58 | %token tokElse | 58 | %token tokElse |
| 59 | %token tokNot | 59 | %token tokNot |
| 60 | %token tokCommand | 60 | %token tokCommand |
| 61 | %token tokOption | ||
| 61 | %token tokPlayer | 62 | %token tokPlayer |
| 62 | %token tokLtEq | 63 | %token tokLtEq |
| 63 | %token tokGtEq | 64 | %token tokGtEq |
| 64 | %token tokCmp | 65 | %token tokCmp |
| 65 | %token tokReturn | 66 | %token tokReturn |
| 67 | %token tokIgnore | ||
| 66 | %token tokPlusAssign | 68 | %token tokPlusAssign |
| 67 | %token tokMinusAssign | 69 | %token tokMinusAssign |
| 68 | %token tokTimesAssign | 70 | %token tokTimesAssign |
| @@ -108,6 +110,7 @@ globalExprList: | |||
| 108 | 110 | ||
| 109 | cmpltGlobalExpr: globalExpr ';' | 111 | cmpltGlobalExpr: globalExpr ';' |
| 110 | | commandDecl | 112 | | commandDecl |
| 113 | | ignoreDecl | ||
| 111 | ; | 114 | ; |
| 112 | 115 | ||
| 113 | globalExpr: tokIdent '=' expr | 116 | globalExpr: tokIdent '=' expr |
| @@ -118,12 +121,19 @@ bodyDecl: | |||
| 118 | | bodyDecl function | 121 | | bodyDecl function |
| 119 | ; | 122 | ; |
| 120 | 123 | ||
| 121 | situation: tokSituation tokSituationName { bld.beginSituation( *($2) ); } '{' situationMembers '}' { bld.endSituation(); } | 124 | situationMode: tokSituation tokSituationName { bld.beginSituation( *($2) ); } |
| 125 | | tokCommand tokSituation tokSituationName { bld.beginSituation( *($2) ); } | ||
| 126 | | tokOption tokSituation tokSituationName { bld.beginSituation( *($2) ); } | ||
| 127 | ; | ||
| 128 | |||
| 129 | situation: situationMode '{' situationMembers '}' { bld.endSituation(); } | ||
| 122 | ; | 130 | ; |
| 123 | 131 | ||
| 124 | situationMembers: | 132 | situationMembers: |
| 125 | | situationMembers situationModeFunc | 133 | | situationMembers situationModeFunc |
| 126 | | situationMembers commandDecl | 134 | | situationMembers commandDecl |
| 135 | | situationMembers optionDecl | ||
| 136 | | situationMembers ignoreDecl | ||
| 127 | ; | 137 | ; |
| 128 | 138 | ||
| 129 | situationModeFunc: situationMode '{' cmpltExprList '}' { | 139 | situationModeFunc: situationMode '{' cmpltExprList '}' { |
| @@ -274,6 +284,9 @@ dictValues: expr ':' expr { bld.addNode( AstNode::tInsert ); } | |||
| 274 | | dictValues ',' expr ':' expr { bld.addNode( AstNode::tInsert ); } | 284 | | dictValues ',' expr ':' expr { bld.addNode( AstNode::tInsert ); } |
| 275 | ; | 285 | ; |
| 276 | 286 | ||
| 287 | optionDecl: tokOption ':' tokString '{' cmpltExprList '}' | ||
| 288 | ; | ||
| 289 | |||
| 277 | commandDecl: tokCommand ':' tokString { bld.beginCommand( *$3 ); } | 290 | commandDecl: tokCommand ':' tokString { bld.beginCommand( *$3 ); } |
| 278 | commandParamList '{' { bld.endCommandParams(); } cmpltExprList '}' { bld.closeCommand(); } | 291 | commandParamList '{' { bld.endCommandParams(); } cmpltExprList '}' { bld.closeCommand(); } |
| 279 | ; | 292 | ; |
| @@ -282,6 +295,13 @@ commandParamList: | |||
| 282 | | commandParamList tokString { bld.addCommandLiteral( *$2 ); } | 295 | | commandParamList tokString { bld.addCommandLiteral( *$2 ); } |
| 283 | | commandParamList tokIdent { bld.addCommandParam( *$2 ); } | 296 | | commandParamList tokIdent { bld.addCommandParam( *$2 ); } |
| 284 | ; | 297 | ; |
| 298 | |||
| 299 | ignoreDecl: tokIgnore ':' tokString ignoreList ';' | ||
| 300 | ; | ||
| 301 | |||
| 302 | ignoreList: | ||
| 303 | | ignoreList tokString | ||
| 304 | ; | ||
| 285 | %% | 305 | %% |
| 286 | /* | 306 | /* |
| 287 | void yylex_init( yyscan_t * ); | 307 | void yylex_init( yyscan_t * ); |
