static int ruleList(int symbolIndex){ int length; int result; assert(nRULES < MAX_RULES); RULENAME[nRULES] = symbolIndex; result = termList(); nRULES += 1; if(result){ return result; } if(TOKENNAME[tokenIndex] == TOKNAME_PIPE){ tokenIndex++; result = ruleList(symbolIndex); if(result){ return result; } return 0; } else { return 0; } }
void datalogProgram ::ruleList(){ if (tokens.at(vecIndex).getTokenType() == ID && tokens.at(vecIndex + 2).getTokenType() == ID){ Rule(); ruleList(); } else if (tokens.at(vecIndex).getTokenType() == QUERIES){} else{ if (currentStatus == true){ currentStatus = false; falseTok = tokens.at(vecIndex); } } }
void JXComposeRuleList::BuildHelp ( JString* text ) const { JArray<Rule> ruleList(*itsRuleList); ruleList.SetCompareFunction(CompareForHelp); ruleList.Sort(); *text = JGetString(kComposeHelpPrefixID); const JSize ruleCount = ruleList.GetElementCount(); for (JIndex i=1; i<=ruleCount; i++) { const Rule r = ruleList.GetElement(i); *text += "<tr><td>"; text->AppendCharacter(r.GetOutputCharacter()); *text += "</td><td>"; const JSize keyCount = (r.inputSeq)->GetElementCount(); for (JIndex j=1; j<=keyCount; j++) { *text += XKeysymToString((r.inputSeq)->GetElement(j)); text->AppendCharacter(' '); } *text += "</td></tr>"; } *text += "</table>" "</body>" "</html>"; }
static int ruleSet(){ int result; int symbolIndex; if(TOKENNAME[tokenIndex] == TOKNAME_NONTERMINAL){ symbolIndex = TOKENVALUE[tokenIndex]; tokenIndex++; if(TOKENNAME[tokenIndex] == TOKNAME_COLON){ tokenIndex++; result = ruleList(symbolIndex); if(result){ return result; } if(TOKENNAME[tokenIndex] == TOKNAME_SEMICOLON){ tokenIndex++; if(TOKENNAME[tokenIndex] == TOKNAME_NONTERMINAL){ return ruleSet(); } else { return 0; } } else { parserErrorNumber = PARSERR_EXPECTED_SEMICOLON; return -1; } } else { parserErrorNumber = PARSERR_EXPECTED_COLON; return -1; } } else { parserErrorNumber = PARSERR_EXPECTED_NONTERMINAL; return -1; } }
void datalogProgram :: datalogProg(){ if (tokens.at(vecIndex).getTokenType() == SCHEMES){ match(SCHEMES); match(COLON); scheme(); schemeList(); match(FACTS); match(COLON); factList(); match(RULES); match(COLON); ruleList(); match(QUERIES); match(COLON); query(); queryList(); } else{ if (currentStatus == true){ currentStatus = false; falseTok = tokens.at(vecIndex); } } }