docs: public final EObject ruleAtom() throws RecognitionException {
          EObject current = null;
  
          EObject this_ParameterReference_0 = null;
  
          EObject this_ParenthesizedCondition_1 = null;
  
          EObject this_LiteralCondition_2 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:1949:2: ( (this_ParameterReference_0= ruleParameterReference | this_ParenthesizedCondition_1= ruleParenthesizedCondition | this_LiteralCondition_2= ruleLiteralCondition ) )
              // InternalXtext.g:1950:2: (this_ParameterReference_0= ruleParameterReference | this_ParenthesizedCondition_1= ruleParenthesizedCondition | this_LiteralCondition_2= ruleLiteralCondition )
              {
              // InternalXtext.g:1950:2: (this_ParameterReference_0= ruleParameterReference | this_ParenthesizedCondition_1= ruleParenthesizedCondition | this_LiteralCondition_2= ruleLiteralCondition )
              int alt47=3;
              switch ( input.LA(1) ) {
              case RULE_ID:
                  {
                  alt47=1;
                  }
                  break;
              case 15:
                  {
                  alt47=2;
                  }
                  break;
              case 39:
              case 40:
                  {
                  alt47=3;
                  }
                  break;
              default:
                  NoViableAltException nvae =
                      new NoViableAltException("", 47, 0, input);
  
                  throw nvae;
              }
  
              switch (alt47) {
                  case 1 :
                      // InternalXtext.g:1951:3: this_ParameterReference_0= ruleParameterReference
                      {
  
                      			newCompositeNode(grammarAccess.getAtomAccess().getParameterReferenceParserRuleCall_0());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_ParameterReference_0=ruleParameterReference();
  
                      state._fsp--;
  
  
                      			current = this_ParameterReference_0;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 2 :
                      // InternalXtext.g:1960:3: this_ParenthesizedCondition_1= ruleParenthesizedCondition
                      {
  
                      			newCompositeNode(grammarAccess.getAtomAccess().getParenthesizedConditionParserRuleCall_1());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_ParenthesizedCondition_1=ruleParenthesizedCondition();
  
                      state._fsp--;
  
  
                      			current = this_ParenthesizedCondition_1;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 3 :
                      // InternalXtext.g:1969:3: this_LiteralCondition_2= ruleLiteralCondition
                      {
  
                      			newCompositeNode(grammarAccess.getAtomAccess().getLiteralConditionParserRuleCall_2());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_LiteralCondition_2=ruleLiteralCondition();
  
                      state._fsp--;
  
  
                      			current = this_LiteralCondition_2;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }