Beispiel #1
0
// Parse a primary expression.
//
//    primary-expr -> literal | identifier | '(' expr ')'
//
//    literal -> integer-literal
//             | boolean-literal
//             | character-literal
//             | string-literal
Expr*
Parser::primary_expr()
{
  // identifier
  if (Token tok = match_if(identifier_tok))
    return on_id(tok);

  // boolean-literal
  if (Token tok = match_if(boolean_tok))
    return on_bool(tok);

  // integer-literal
  if (Token tok = match_if(integer_tok))
    return on_int(tok);

  // character-literal
  if (Token tok = match_if(character_tok))
    return on_char(tok);

  // string-literal
  if (Token tok = match_if(string_tok))
    return on_str(tok);

  // paren-expr
  if (match_if(lparen_tok)) {
    Expr* e = expr();
    match(rparen_tok);
    return e;
  }

  // FIXME: Is this definitely an error? Or can we
  // actually return nullptr and continue?
  error("expected primary expression");
}
Beispiel #2
0
static bool on_buffer_event(event* event) {
  if (event-> flags & BUFFER_HOLDING || event-> flags & BUFFER_FULL) {
    struct buffer* buffer = (struct buffer*) event->descriptor.address;
    while (buffer->element_count > 0) {
    	char c = buffer_shift_uint8(buffer);
    	if (c != 0) {
      	if (c == '\n') {
          on_char_return();
        } else if (c == '\b') {
          on_char_backspace();
    		} else {
          on_char(c);
    		}
      }
      
    }
  }
	return true;
}
Beispiel #3
0
void kWindow::OnChar(UINT ch,UINT rep,UINT fl)
{
 on_char(ch,rep,fl);
 CWnd::OnChar(ch,rep,fl);
}