Changeset 240

Show
Ignore:
Timestamp:
08/13/06 16:33:29 (2 years ago)
Author:
pragma
Message:

Bugfixes for WS/Comment parsing and D Tokenizer

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/enki/EnkiParser.d

    r237 r240  
    4343     
    4444WS 
    45     ::= ws [ ( SlashSlashComment | SlashStarComment) ws]; 
     45    ::= ws [ (  SlashSlashComment |  SlashStarComment)  WS]; 
    4646 
    4747    */ 
     
    7070                        } 
    7171                    } 
    72                     if(!(parse_ws().success)){ 
     72                    if(!(parse_WS().success)){ 
    7373                        goto mismatch6; 
    7474                    } 
     
    8585            goto match3; 
    8686        mismatch4: 
    87             setError("Expected Whitespace."); 
     87            setError("Expected ws."); 
    8888            position = start2; 
    8989            goto mismatch2; 
     
    104104Syntax 
    105105    = void createSyntax(SyntaxLine[] lines) 
    106     ::= WS { ( Rule:~lines | Comment:~lines | Directive:~lines) WS}eoi; 
     106    ::= WS { (  Rule:~lines |  Comment:~lines |  Directive:~lines)  WS} eoi; 
    107107 
    108108    */ 
     
    120120            {//ZeroOrMoreExpr 
    121121                uint start8 = position; 
    122                 uint termPos
     122                uint termPos9
    123123            loop11: 
    124                 termPos = position; 
     124                termPos9 = position; 
    125125                if(parse_eoi().success){ 
    126126                    goto loopend12; 
    127127                } 
    128128                {//Expression 
    129                     uint start9 = position; 
     129                    uint start10 = position; 
    130130                    {//Expression 
    131                         uint start10 = position; 
     131                        uint start11 = position; 
    132132                        if((parse_Rule().assignCat!(SyntaxLine[])(bind_lines)) || (parse_Comment().assignCat!(SyntaxLine[])(bind_lines)) || (parse_Directive().assignCat!(SyntaxLine[])(bind_lines))){ 
    133133                            clearErrors(); 
    134134                        }else{ 
    135135                            setError("Expected Rule, Comment or Directive."); 
    136                             position = start10
     136                            position = start11
    137137                            goto mismatch14; 
    138138                        } 
     
    144144                mismatch14: 
    145145                    {/*do nothing*/} 
    146                     position = start9
     146                    position = start10
    147147                    goto mismatch10; 
    148148                match13: 
     
    175175Rule 
    176176    = new Rule(String name,RulePredicate pred,Expression expr,RuleDecl decl) 
    177     ::= WS Identifier:name WS [ RuleDecl:decl WS] [ RulePredicate:pred] WS "::=" WS Expression:expr WS ";"; 
     177    ::= Identifier:name  WS [  RuleDecl:decl  WS] [  RulePredicate:pred]  WS  "::="  WS  Expression:expr  WS ";"; 
    178178 
    179179    */ 
    180180    public ResultT!(Rule) parse_Rule(){ 
    181181        debug writefln("parse_Rule()"); 
    182         uint start11 = position; 
     182        uint start12 = position; 
    183183        String bind_name; 
    184184        RulePredicate bind_pred; 
     
    188188         
    189189        {//Expression 
    190             uint start12 = position; 
    191             if(!(parse_WS().success)){ 
    192                 goto mismatch18; 
    193             } 
     190            uint start13 = position; 
    194191            if(!(parse_Identifier().assign!(String)(bind_name))){ 
    195192                goto mismatch18; 
     
    200197            {//OptionalExpr 
    201198                {//Expression 
    202                     uint start14 = position; 
     199                    uint start15 = position; 
    203200                    if((parse_RuleDecl().assign!(RuleDecl)(bind_decl) && parse_WS().success)){ 
    204201                        clearErrors(); 
    205202                    }else{ 
    206                         position = start14
     203                        position = start15
    207204                    } 
    208205                } 
     
    210207            {//OptionalExpr 
    211208                {//Expression 
    212                     uint start16 = position; 
     209                    uint start17 = position; 
    213210                    if((parse_RulePredicate().assign!(RulePredicate)(bind_pred))){ 
    214211                        clearErrors(); 
    215212                    }else{ 
    216                         position = start16
     213                        position = start17
    217214                    } 
    218215                } 
     
    238235            goto match17; 
    239236        mismatch18: 
    240             setError("Expected WS."); 
    241             position = start12
     237            setError("Expected Identifier."); 
     238            position = start13
    242239            goto mismatch16; 
    243240        match17: 
     
    250247        return passed; 
    251248    mismatch16: 
    252         position = start11
     249        position = start12
    253250        ResultT!(Rule) failed = ResultT!(Rule)(); 
    254251        return failed; 
     
    259256RuleDecl 
    260257    = new RuleDecl(Param[] params) 
    261     ::= ParamsExpr:params; 
     258    ::= ParamsExpr:params; 
    262259 
    263260    */ 
    264261    public ResultT!(RuleDecl) parse_RuleDecl(){ 
    265262        debug writefln("parse_RuleDecl()"); 
    266         uint start17 = position; 
     263        uint start18 = position; 
    267264        Param[] bind_params; 
    268265         
    269266         
    270267        {//Expression 
    271             uint start18 = position; 
     268            uint start19 = position; 
    272269            if((parse_ParamsExpr().assign!(Param[])(bind_params))){ 
    273270                clearErrors(); 
     
    275272            }else{ 
    276273                setError("Expected ParamsExpr."); 
    277                 position = start18
     274                position = start19
    278275                goto mismatch20; 
    279276            } 
     
    284281        return passed; 
    285282    mismatch20: 
    286         position = start17
     283        position = start18
    287284        ResultT!(RuleDecl) failed = ResultT!(RuleDecl)(); 
    288285        return failed; 
     
    293290RulePredicate 
    294291    = RulePredicate pred 
    295     ::= "=" WS ( ClassPredicate:pred | FunctionPredicate:pred | BindingPredicate:pred); 
     292    ::= "="  WS (  ClassPredicate:pred |  FunctionPredicate:pred | BindingPredicate:pred); 
    296293 
    297294    */ 
    298295    public ResultT!(RulePredicate) parse_RulePredicate(){ 
    299296        debug writefln("parse_RulePredicate()"); 
    300         uint start19 = position; 
     297        uint start20 = position; 
    301298        RulePredicate bind_pred; 
    302299         
    303300         
    304301        {//Expression 
    305             uint start20 = position; 
     302            uint start21 = position; 
    306303            if(!(terminal("=").success)){ 
    307304                goto mismatch24; 
     
    311308            } 
    312309            {//Expression 
    313                 uint start21 = position; 
     310                uint start22 = position; 
    314311                if((parse_ClassPredicate().assign!(RulePredicate)(bind_pred)) || (parse_FunctionPredicate().assign!(RulePredicate)(bind_pred)) || (parse_BindingPredicate().assign!(RulePredicate)(bind_pred))){ 
    315312                    clearErrors(); 
    316313                }else{ 
    317314                    setError("Expected ClassPredicate, FunctionPredicate or BindingPredicate."); 
    318                     position = start21
     315                    position = start22
    319316                    goto mismatch24; 
    320317                } 
     
    323320        mismatch24: 
    324321            {/*do nothing*/} 
    325             position = start20
     322            position = start21
    326323            goto mismatch22; 
    327324        match23: 
     
    333330        return ResultT!(RulePredicate)(bind_pred); 
    334331    mismatch22: 
    335         position = start19
     332        position = start20
    336333        return ResultT!(RulePredicate)(); 
    337334    } 
     
    341338ClassPredicate 
    342339    = new ClassPredicate(String name,Param[] params) 
    343     ::= "new" WS Identifier:name WS ParamsExpr:params; 
     340    ::= "new"  WS  Identifier:name  WS ParamsExpr:params; 
    344341 
    345342    */ 
    346343    public ResultT!(ClassPredicate) parse_ClassPredicate(){ 
    347344        debug writefln("parse_ClassPredicate()"); 
    348         uint start22 = position; 
     345        uint start23 = position; 
    349346        String bind_name; 
    350347        Param[] bind_params; 
     
    352349         
    353350        {//Expression 
    354             uint start23 = position; 
     351            uint start24 = position; 
    355352            if((terminal("new").success && parse_WS().success && parse_Identifier().assign!(String)(bind_name) && parse_WS().success && parse_ParamsExpr().assign!(Param[])(bind_params))){ 
    356353                clearErrors(); 
    357354                goto match25; 
    358355            }else{ 
    359                 position = start23
     356                position = start24
    360357                goto mismatch26; 
    361358            } 
     
    366363        return passed; 
    367364    mismatch26: 
    368         position = start22
     365        position = start23
    369366        ResultT!(ClassPredicate) failed = ResultT!(ClassPredicate)(); 
    370367        return failed; 
     
    375372FunctionPredicate 
    376373    = new FunctionPredicate(Param decl,Param[] params) 
    377     ::= ExplicitParam:decl WS ParamsExpr:params; 
     374    ::= ExplicitParam:decl  WS ParamsExpr:params; 
    378375 
    379376    */ 
    380377    public ResultT!(FunctionPredicate) parse_FunctionPredicate(){ 
    381378        debug writefln("parse_FunctionPredicate()"); 
    382         uint start24 = position; 
     379        uint start25 = position; 
    383380        Param bind_decl; 
    384381        Param[] bind_params; 
     
    386383         
    387384        {//Expression 
    388             uint start25 = position; 
     385            uint start26 = position; 
    389386            if((parse_ExplicitParam().assign!(Param)(bind_decl) && parse_WS().success && parse_ParamsExpr().assign!(Param[])(bind_params))){ 
    390387                clearErrors(); 
     
    392389            }else{ 
    393390                setError("Expected ExplicitParam."); 
    394                 position = start25
     391                position = start26
    395392                goto mismatch28; 
    396393            } 
     
    401398        return passed; 
    402399    mismatch28: 
    403         position = start24
     400        position = start25
    404401        ResultT!(FunctionPredicate) failed = ResultT!(FunctionPredicate)(); 
    405402        return failed; 
     
    410407BindingPredicate 
    411408    = new BindingPredicate(Param param) 
    412     ::= Param:param; 
     409    ::= Param:param; 
    413410 
    414411    */ 
    415412    public ResultT!(BindingPredicate) parse_BindingPredicate(){ 
    416413        debug writefln("parse_BindingPredicate()"); 
    417         uint start26 = position; 
     414        uint start27 = position; 
    418415        Param bind_param; 
    419416         
    420417         
    421418        {//Expression 
    422             uint start27 = position; 
     419            uint start28 = position; 
    423420            if((parse_Param().assign!(Param)(bind_param))){ 
    424421                clearErrors(); 
     
    426423            }else{ 
    427424                setError("Expected Param."); 
    428                 position = start27
     425                position = start28
    429426                goto mismatch30; 
    430427            } 
     
    435432        return passed; 
    436433    mismatch30: 
    437         position = start26
     434        position = start27
    438435        ResultT!(BindingPredicate) failed = ResultT!(BindingPredicate)(); 
    439436        return failed; 
     
    444441ParamsExpr 
    445442    = Param[] params 
    446     ::= "(" WS [ Param:~params WS { "," WS Param:~params WS}] ")"; 
     443    ::= "("  WS [  Param:~params  WS {  ","  WS  Param:~params  WS}] ")"; 
    447444 
    448445    */ 
    449446    public ResultT!(Param[]) parse_ParamsExpr(){ 
    450447        debug writefln("parse_ParamsExpr()"); 
    451         uint start28 = position; 
     448        uint start29 = position; 
    452449        Param[] bind_params; 
    453450         
    454451         
    455452        {//Expression 
    456             uint start29 = position; 
     453            uint start30 = position; 
    457454            if(!(terminal("(").success)){ 
    458455                goto mismatch34; 
     
    463460            {//OptionalExpr 
    464461                {//Expression 
    465                     uint start31 = position; 
     462                    uint start32 = position; 
    466463                    if(!(parse_Param().assignCat!(Param[])(bind_params))){ 
    467464                        goto mismatch36; 
     
    471468                    } 
    472469                    {//ZeroOrMoreExpr 
    473                         uint termPos
     470                        uint termPos34
    474471                    loop37: 
    475                         termPos = position; 
     472                        termPos34 = position; 
    476473                        {//Expression 
    477                             uint start33 = position; 
     474                            uint start35 = position; 
    478475                            if((terminal(",").success && parse_WS().success && parse_Param().assignCat!(Param[])(bind_params) && parse_WS().success)){ 
    479476                                clearErrors(); 
    480477                                goto loop37; 
    481478                            }else{ 
    482                                 position = start33
     479                                position = start35
    483480                                goto loopend38; 
    484481                            } 
     
    490487                mismatch36: 
    491488                    {/*do nothing*/} 
    492                     position = start31
     489                    position = start32
    493490                    {/*do nothing*/} 
    494491                match35: 
     
    503500        mismatch34: 
    504501            {/*do nothing*/} 
    505             position = start29
     502            position = start30
    506503            goto mismatch32; 
    507504        match33: 
     
    513510        return ResultT!(Param[])(bind_params); 
    514511    mismatch32: 
    515         position = start28
     512        position = start29
    516513        return ResultT!(Param[])(); 
    517514    } 
     
    521518Param 
    522519    = Param param 
    523     ::= ExplicitParam:param | WeakParam:param; 
     520    ::= ExplicitParam:param | WeakParam:param; 
    524521 
    525522    */ 
    526523    public ResultT!(Param) parse_Param(){ 
    527524        debug writefln("parse_Param()"); 
    528         uint start34 = position; 
     525        uint start36 = position; 
    529526        Param bind_param; 
    530527         
    531528         
    532529        {//Expression 
    533             uint start35 = position; 
     530            uint start37 = position; 
    534531            if((parse_ExplicitParam().assign!(Param)(bind_param)) || (parse_WeakParam().assign!(Param)(bind_param))){ 
    535532                clearErrors(); 
     
    537534            }else{ 
    538535                setError("Expected ExplicitParam or WeakParam."); 
    539                 position = start35
     536                position = start37
    540537                goto mismatch40; 
    541538            } 
     
    545542        return ResultT!(Param)(bind_param); 
    546543    mismatch40: 
    547         position = start34
     544        position = start36
    548545        return ResultT!(Param)(); 
    549546    } 
     
    553550WeakParam 
    554551    = new Param(String name) 
    555     ::= Identifier:name; 
     552    ::= Identifier:name; 
    556553 
    557554    */ 
    558555    public ResultT!(Param) parse_WeakParam(){ 
    559556        debug writefln("parse_WeakParam()"); 
    560         uint start36 = position; 
     557        uint start38 = position; 
    561558        String bind_name; 
    562559         
    563560         
    564561        {//Expression 
    565             uint start37 = position; 
     562            uint start39 = position; 
    566563            if((parse_Identifier().assign!(String)(bind_name))){ 
    567564                clearErrors(); 
     
    569566            }else{ 
    570567                setError("Expected Identifier."); 
    571                 position = start37
     568                position = start39
    572569                goto mismatch42; 
    573570            } 
     
    578575        return passed; 
    579576    mismatch42: 
    580         position = start36
     577        position = start38
    581578        ResultT!(Param) failed = ResultT!(Param)(); 
    582579        return failed; 
     
    587584ExplicitParam 
    588585    = new Param(bool isArray,String type,String name) 
    589     ::= Identifier:type WS [ "[]":isArray Brackets WS] Identifier:name; 
     586    ::= Identifier:type  WS [  "[]":isArray  Brackets  WS] Identifier:name; 
    590587 
    591588    */ 
    592589    public ResultT!(Param) parse_ExplicitParam(){ 
    593590        debug writefln("parse_ExplicitParam()"); 
    594         uint start38 = position; 
     591        uint start40 = position; 
    595592        bool bind_isArray; 
    596593        String bind_type; 
     
    599596         
    600597        {//Expression 
    601             uint start39 = position; 
     598            uint start41 = position; 
    602599            if(!(parse_Identifier().assign!(String)(bind_type))){ 
    603600                goto mismatch46; 
     
    608605            {//OptionalExpr 
    609606                {//Expression 
    610                     uint start41 = position; 
     607                    uint start43 = position; 
    611608                    if((terminal("[]").assign!(bool)(bind_isArray) && parse_Brackets().success && parse_WS().success)){ 
    612609                        clearErrors(); 
    613610                    }else{ 
    614                         position = start41
     611                        position = start43
    615612                    } 
    616613                } 
     
    622619        mismatch46: 
    623620            setError("Expected Identifier."); 
    624             position = start39
     621            position = start41
    625622            goto mismatch44; 
    626623        match45: 
     
    633630        return passed; 
    634631    mismatch44: 
    635         position = start38
     632        position = start40
    636633        ResultT!(Param) failed = ResultT!(Param)(); 
    637634        return failed; 
     
    641638     
    642639Brackets 
    643     ::= [ "[]" Brackets]; 
     640    ::= [ "[]" Brackets]; 
    644641 
    645642    */ 
    646643    public ResultT!(bool) parse_Brackets(){ 
    647644        debug writefln("parse_Brackets()"); 
    648         uint start42 = position; 
     645        uint start44 = position; 
    649646        //no declarations 
    650647         
    651648         
    652649        {//Expression 
    653             uint start43 = position; 
     650            uint start45 = position; 
    654651            {//OptionalExpr 
    655652                {//Expression 
    656                     uint start45 = position; 
     653                    uint start47 = position; 
    657654                    if((terminal("[]").success && parse_Brackets().success)){ 
    658655                        clearErrors(); 
    659656                    }else{ 
    660                         position = start45
     657                        position = start47
    661658                    } 
    662659                } 
     
    665662        mismatch50: 
    666663            {/*do nothing*/} 
    667             position = start43
     664            position = start45
    668665            goto mismatch48; 
    669666        match49: 
     
    675672        return ResultT!(bool)(true); 
    676673    mismatch48: 
    677         position = start42
     674        position = start44
    678675        return ResultT!(bool)(); 
    679676    } 
     
    683680Expression 
    684681    = new Expression(Term[] terms) 
    685     ::= Term:~terms WS { "|" WS Term:~terms WS}; 
     682    ::= Term:~terms  WS {  "|"  WS  Term:~terms WS}; 
    686683 
    687684    */ 
    688685    public ResultT!(Expression) parse_Expression(){ 
    689686        debug writefln("parse_Expression()"); 
    690         uint start46 = position; 
     687        uint start48 = position; 
    691688        Term[] bind_terms; 
    692689         
    693690         
    694691        {//Expression 
    695             uint start47 = position; 
     692            uint start49 = position; 
    696693            if(!(parse_Term().assignCat!(Term[])(bind_terms))){ 
    697694                goto mismatch54; 
     
    701698            } 
    702699            {//ZeroOrMoreExpr 
    703                 uint termPos
     700                uint termPos51
    704701            loop55: 
    705                 termPos = position; 
    706                 {//Expression 
    707                     uint start49 = position; 
     702                termPos51 = position; 
     703                {//Expression 
     704                    uint start52 = position; 
    708705                    if((terminal("|").success && parse_WS().success && parse_Term().assignCat!(Term[])(bind_terms) && parse_WS().success)){ 
    709706                        clearErrors(); 
    710707                        goto loop55; 
    711708                    }else{ 
    712                         position = start49
     709                        position = start52
    713710                        goto loopend56; 
    714711                    } 
     
    720717        mismatch54: 
    721718            setError("Expected Term."); 
    722             position = start47
     719            position = start49
    723720            goto mismatch52; 
    724721        match53: 
     
    731728        return passed; 
    732729    mismatch52: 
    733         position = start46
     730        position = start48
    734731        ResultT!(Expression) failed = ResultT!(Expression)(); 
    735732        return failed; 
     
    740737Term 
    741738    = SubExpression[] factors 
    742     ::= SubExpression:~factors WS { SubExpression:~factors WS}; 
     739    ::= SubExpression:~factors  WS {  SubExpression:~factors WS}; 
    743740 
    744741    */ 
    745742    public ResultT!(SubExpression[]) parse_Term(){ 
    746743        debug writefln("parse_Term()"); 
    747         uint start50 = position; 
     744        uint start53 = position; 
    748745        SubExpression[] bind_factors; 
    749746         
    750747         
    751748        {//Expression 
    752             uint start51 = position; 
     749            uint start54 = position; 
    753750            if(!(parse_SubExpression().assignCat!(SubExpression[])(bind_factors))){ 
    754751                goto mismatch60; 
     
    758755            } 
    759756            {//ZeroOrMoreExpr 
    760                 uint termPos
     757                uint termPos56
    761758            loop61: 
    762                 termPos = position; 
    763                 {//Expression 
    764                     uint start53 = position; 
     759                termPos56 = position; 
     760                {//Expression 
     761                    uint start57 = position; 
    765762                    if((parse_SubExpression().assignCat!(SubExpression[])(bind_factors) && parse_WS().success)){ 
    766763                        clearErrors(); 
     
    768765                    }else{ 
    769766                        setError("Expected SubExpression."); 
    770                         position = start53
     767                        position = start57
    771768                        goto loopend62; 
    772769                    } 
     
    778775        mismatch60: 
    779776            setError("Expected SubExpression."); 
    780             position = start51
     777            position = start54
    781778            goto mismatch58; 
    782779        match59: 
     
    788785        return ResultT!(SubExpression[])(bind_factors); 
    789786    mismatch58: 
    790         position = start50
     787        position = start53
    791788        return ResultT!(SubExpression[])(); 
    792789    } 
     
    796793SubExpression 
    797794    = SubExpression expr 
    798     ::= Production:expr | Substitution:expr | Terminal:expr | Range:expr | Regexp:expr | GroupExpr:expr | OptionalExpr:expr | ZeroOrMoreExpr:expr | NegateExpr:expr | TestExpr:expr | LiteralExpr:expr | CustomTerminal:expr; 
     795    ::= Production:expr |  Substitution:expr |  Terminal:expr |  Range:expr |  Regexp:expr |  GroupExpr:expr |  OptionalExpr:expr |  ZeroOrMoreExpr:expr |  NegateExpr:expr |  TestExpr:expr |  LiteralExpr:expr | CustomTerminal:expr; 
    799796 
    800797    */ 
    801798    public ResultT!(SubExpression) parse_SubExpression(){ 
    802799        debug writefln("parse_SubExpression()"); 
    803         uint start54 = position; 
     800        uint start58 = position; 
    804801        SubExpression bind_expr; 
    805802         
    806803         
    807804        {//Expression 
    808             uint start55 = position; 
     805            uint start59 = position; 
    809806            if((parse_Production().assign!(SubExpression)(bind_expr)) || (parse_Substitution().assign!(SubExpression)(bind_expr)) || (parse_Terminal().assign!(SubExpression)(bind_expr)) || (parse_Range().assign!(SubExpression)(bind_expr)) || (parse_Regexp().assign!(SubExpression)(bind_expr)) || (parse_GroupExpr().assign!(SubExpression)(bind_expr)) || (parse_OptionalExpr().assign!(SubExpression)(bind_expr)) || (parse_ZeroOrMoreExpr().assign!(SubExpression)(bind_expr)) || (parse_NegateExpr().assign!(SubExpression)(bind_expr)) || (parse_TestExpr().assign!(SubExpression)(bind_expr)) || (parse_LiteralExpr().assign!(SubExpression)(bind_expr)) || (parse_CustomTerminal().assign!(SubExpression)(bind_expr))){ 
    810807                clearErrors(); 
     
    812809            }else{ 
    813810                setError("Expected Production, Substitution, Terminal, Range, Regexp, GroupExpr, OptionalExpr, ZeroOrMoreExpr, NegateExpr, TestExpr, LiteralExpr or CustomTerminal."); 
    814                 position = start55
     811                position = start59
    815812                goto mismatch64; 
    816813            } 
     
    820817        return ResultT!(SubExpression)(bind_expr); 
    821818    mismatch64: 
    822         position = start54
     819        position = start58
    823820        return ResultT!(SubExpression)(); 
    824821    } 
     
    828825Production 
    829826    = new Production(String name,Binding binding,ProductionArg[] args) 
    830     ::= Identifier:name WS [ "!(" WS ProductionArg:~args { WS "," WS ProductionArg:~args}")"] [ Binding:binding]; 
     827    ::= Identifier:name  WS [  "!("  WS  ProductionArg:~args {  WS  ","  WS  ProductionArg:~args} ")"] [ Binding:binding]; 
    831828 
    832829    */ 
    833830    public ResultT!(Production) parse_Production(){ 
    834831        debug writefln("parse_Production()"); 
    835         uint start56 = position; 
     832        uint start60 = position; 
    836833        String bind_name; 
    837834        Binding bind_binding; 
     
    840837         
    841838        {//Expression 
    842             uint start57 = position; 
     839            uint start61 = position; 
    843840            if(!(parse_Identifier().assign!(String)(bind_name))){ 
    844841                goto mismatch68; 
     
    849846            {//OptionalExpr 
    850847                {//Expression 
    851                     uint start59 = position; 
     848                    uint start63 = position; 
    852849                    if(!(terminal("!(").success)){ 
    853850                        goto mismatch70; 
     
    860857                    } 
    861858                    {//ZeroOrMoreExpr 
    862                         uint start60 = position; 
    863                         uint termPos
     859                        uint start64 = position; 
     860                        uint termPos65
    864861                    loop71: 
    865                         termPos = position; 
     862                        termPos65 = position; 
    866863                        if(terminal(")").success){ 
    867864                            goto loopend72; 
    868865                        } 
    869866                        {//Expression 
    870                             uint start61 = position; 
     867                            uint start66 = position; 
    871868                            if((parse_WS().success && terminal(",").success && parse_WS().success && parse_ProductionArg().assignCat!(ProductionArg[])(bind_args))){ 
    872869                                clearErrors(); 
     
    874871                            }else{ 
    875872                                setError("Expected WS."); 
    876                                 position = start61
     873                                position = start66
    877874                                goto mismatch70; 
    878875                            } 
     
    884881                mismatch70: 
    885882                    {/*do nothing*/} 
    886                     position = start59
     883                    position = start63
    887884                    {/*do nothing*/} 
    888885                match69: 
     
    893890            {//OptionalExpr 
    894891                {//Expression 
    895                     uint start63 = position; 
     892                    uint start68 = position; 
    896893                    if((parse_Binding().assign!(Binding)(bind_binding))){ 
    897894                        clearErrors(); 
    898895                    }else{ 
    899                         position = start63
     896                        position = start68
    900897                    } 
    901898                } 
     
    904901        mismatch68: 
    905902            setError("Expected Identifier."); 
    906             position = start57
     903            position = start61
    907904            goto mismatch66; 
    908905        match67: 
     
    915912        return passed; 
    916913    mismatch66: 
    917         position = start56
     914        position = start60
    918915        ResultT!(Production) failed = ResultT!(Production)(); 
    919916        return failed; 
     
    924921ProductionArg 
    925922    = ProductionArg arg 
    926     ::= StringProductionArg:arg | BindingProductionArg:arg; 
     923    ::= StringProductionArg:arg | BindingProductionArg:arg; 
    927924 
    928925    */ 
    929926    public ResultT!(ProductionArg) parse_ProductionArg(){ 
    930927        debug writefln("parse_ProductionArg()"); 
    931         uint start64 = position; 
     928        uint start69 = position; 
    932929        ProductionArg bind_arg; 
    933930         
    934931         
    935932        {//Expression 
    936             uint start65 = position; 
     933            uint start70 = position; 
    937934            if((parse_StringProductionArg().assign!(ProductionArg)(bind_arg)) || (parse_BindingProductionArg().assign!(ProductionArg)(bind_arg))){ 
    938935                clearErrors(); 
     
    940937            }else{ 
    941938                setError("Expected StringProductionArg or BindingProductionArg."); 
    942                 position = start65
     939                position = start70
    943940                goto mismatch74; 
    944941            } 
     
    948945        return ResultT!(ProductionArg)(bind_arg); 
    949946    mismatch74: 
    950         position = start64
     947        position = start69
    951948        return ResultT!(ProductionArg)(); 
    952949    } 
     
    956953StringProductionArg 
    957954    = new StringProductionArg(String value) 
    958     ::= String:value; 
     955    ::= String:value; 
    959956 
    960957    */ 
    961958    public ResultT!(StringProductionArg) parse_StringProductionArg(){ 
    962959        debug writefln("parse_StringProductionArg()"); 
    963         uint start66 = position; 
     960        uint start71 = position; 
    964961        String bind_value; 
    965962         
    966963         
    967964        {//Expression 
    968             uint start67 = position; 
     965            uint start72 = position; 
    969966            if((parse_String().assign!(String)(bind_value))){ 
    970967                clearErrors(); 
     
    972969            }else{ 
    973970                setError("Expected String."); 
    974                 position = start67
     971                position = start72
    975972                goto mismatch76; 
    976973            } 
     
    981978        return passed; 
    982979    mismatch76: 
    983         position = start66
     980        position = start71
    984981        ResultT!(StringProductionArg) failed = ResultT!(StringProductionArg)(); 
    985982        return failed; 
     
    990987BindingProductionArg 
    991988    = new BindingProductionArg(String value) 
    992     ::= Identifier:value; 
     989    ::= Identifier:value; 
    993990 
    994991    */ 
    995992    public ResultT!(BindingProductionArg) parse_BindingProductionArg(){ 
    996993        debug writefln("parse_BindingProductionArg()"); 
    997         uint start68 = position; 
     994        uint start73 = position; 
    998995        String bind_value; 
    999996         
    1000997         
    1001998        {//Expression 
    1002             uint start69 = position; 
     999            uint start74 = position; 
    10031000            if((parse_Identifier().assign!(String)(bind_value))){ 
    10041001                clearErrors(); 
     
    10061003            }else{ 
    10071004                setError("Expected Identifier."); 
    1008                 position = start69
     1005                position = start74
    10091006                goto mismatch78; 
    10101007            } 
     
    10151012        return passed; 
    10161013    mismatch78: