| /******************************************************************************* |
| * Copyright (c) 2007 Wind River Systems, Inc. and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * UIUC - Photran modifications |
| * Markus Schorn - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.photran.internal.core.preprocessor.c; |
| |
| import org.eclipse.cdt.core.parser.IGCCToken; |
| import org.eclipse.cdt.core.parser.IToken; |
| import org.eclipse.cdt.core.parser.Keywords; |
| import org.eclipse.cdt.core.parser.util.CharArrayUtils; |
| |
| |
| public class TokenUtil { |
| private static final char[] SPACE = {' '}; |
| private static final char[] IMAGE_POUND_POUND = "##".toCharArray(); //$NON-NLS-1$ |
| private static final char[] IMAGE_POUND = "#".toCharArray(); //$NON-NLS-1$ |
| |
| private static final char[] DIGRAPH_LBRACE= "<%".toCharArray(); //$NON-NLS-1$ |
| private static final char[] DIGRAPH_RBRACE= "%>".toCharArray(); //$NON-NLS-1$ |
| private static final char[] DIGRAPH_LBRACKET= "<:".toCharArray(); //$NON-NLS-1$ |
| private static final char[] DIGRAPH_RBRACKET= ":>".toCharArray(); //$NON-NLS-1$ |
| private static final char[] DIGRAPH_POUND = "%:".toCharArray(); //$NON-NLS-1$ |
| private static final char[] DIGRAPH_POUNDPOUND = "%:%:".toCharArray(); //$NON-NLS-1$ |
| |
| public static boolean isOperator(int kind) { |
| switch (kind) { |
| case IToken.t_delete: case IToken.t_new: |
| |
| // bit operations |
| case IToken.tAMPER: case IToken.tAMPERASSIGN: |
| case IToken.tARROW: case IToken.tARROWSTAR: |
| case IToken.tBITOR: case IToken.tBITORASSIGN: |
| case IToken.tBITCOMPLEMENT: |
| case IToken.tSHIFTL: case IToken.tSHIFTLASSIGN: |
| case IToken.tSHIFTR: case IToken.tSHIFTRASSIGN: |
| case IToken.tXOR: case IToken.tXORASSIGN: |
| |
| // logical operations |
| case IToken.tNOT: case IToken.tAND: case IToken.tOR: |
| |
| // arithmetic |
| case IToken.tDECR: case IToken.tINCR: |
| case IToken.tDIV: case IToken.tDIVASSIGN: |
| case IToken.tMINUS: case IToken.tMINUSASSIGN: |
| case IToken.tMOD: case IToken.tMODASSIGN: |
| case IToken.tPLUS: case IToken.tPLUSASSIGN: |
| case IToken.tSTAR: case IToken.tSTARASSIGN: |
| case IGCCToken.tMAX: case IGCCToken.tMIN: |
| |
| // comparison |
| case IToken.tEQUAL: case IToken.tNOTEQUAL: |
| case IToken.tGT: case IToken.tGTEQUAL: |
| case IToken.tLT: case IToken.tLTEQUAL: |
| |
| // other |
| case IToken.tASSIGN: case IToken.tCOMMA: |
| return true; |
| } |
| |
| return false; |
| } |
| |
| public static char[] getImage(int type) { |
| switch (type) { |
| case IToken.tPOUND: return IMAGE_POUND; |
| case IToken.tPOUNDPOUND: return IMAGE_POUND_POUND; |
| case IToken.tCOLONCOLON: return Keywords.cpCOLONCOLON; |
| case IToken.tCOLON: return Keywords.cpCOLON; |
| case IToken.tSEMI: return Keywords.cpSEMI; |
| case IToken.tCOMMA: return Keywords.cpCOMMA; |
| case IToken.tQUESTION: return Keywords.cpQUESTION; |
| case IToken.tLPAREN : return Keywords.cpLPAREN; |
| case IToken.tRPAREN : return Keywords.cpRPAREN; |
| case IToken.tLBRACKET: return Keywords.cpLBRACKET; |
| case IToken.tRBRACKET: return Keywords.cpRBRACKET; |
| case IToken.tLBRACE: return Keywords.cpLBRACE; |
| case IToken.tRBRACE: return Keywords.cpRBRACE; |
| case IToken.tPLUSASSIGN: return Keywords.cpPLUSASSIGN; |
| case IToken.tINCR: return Keywords.cpINCR; |
| case IToken.tPLUS: return Keywords.cpPLUS; |
| case IToken.tMINUSASSIGN: return Keywords.cpMINUSASSIGN; |
| case IToken.tDECR: return Keywords.cpDECR; |
| case IToken.tARROWSTAR: return Keywords.cpARROWSTAR; |
| case IToken.tARROW: return Keywords.cpARROW; |
| case IToken.tMINUS: return Keywords.cpMINUS; |
| case IToken.tSTARASSIGN: return Keywords.cpSTARASSIGN; |
| case IToken.tSTAR: return Keywords.cpSTAR; |
| case IToken.tMODASSIGN: return Keywords.cpMODASSIGN; |
| case IToken.tMOD: return Keywords.cpMOD; |
| case IToken.tXORASSIGN: return Keywords.cpXORASSIGN; |
| case IToken.tXOR: return Keywords.cpXOR; |
| case IToken.tAMPERASSIGN: return Keywords.cpAMPERASSIGN; |
| case IToken.tAND: return Keywords.cpAND; |
| case IToken.tAMPER: return Keywords.cpAMPER; |
| case IToken.tBITORASSIGN: return Keywords.cpBITORASSIGN; |
| case IToken.tOR: return Keywords.cpOR; |
| case IToken.tBITOR: return Keywords.cpBITOR; |
| case IToken.tBITCOMPLEMENT: return Keywords.cpCOMPL; |
| case IToken.tNOTEQUAL: return Keywords.cpNOTEQUAL; |
| case IToken.tNOT: return Keywords.cpNOT; |
| case IToken.tEQUAL: return Keywords.cpEQUAL; |
| case IToken.tASSIGN: return Keywords.cpASSIGN; |
| case IToken.tSHIFTL: return Keywords.cpSHIFTL; |
| case IToken.tLTEQUAL: return Keywords.cpLTEQUAL; |
| case IToken.tLT: return Keywords.cpLT; |
| case IToken.tSHIFTRASSIGN: return Keywords.cpSHIFTRASSIGN; |
| case IToken.tSHIFTR: return Keywords.cpSHIFTR; |
| case IToken.tGTEQUAL: return Keywords.cpGTEQUAL; |
| case IToken.tGT: return Keywords.cpGT; |
| case IToken.tSHIFTLASSIGN: return Keywords.cpSHIFTLASSIGN; |
| case IToken.tELLIPSIS: return Keywords.cpELLIPSIS; |
| case IToken.tDOTSTAR: return Keywords.cpDOTSTAR; |
| case IToken.tDOT: return Keywords.cpDOT; |
| case IToken.tDIVASSIGN: return Keywords.cpDIVASSIGN; |
| case IToken.tDIV: return Keywords.cpDIV; |
| |
| case IGCCToken.tMIN: return Keywords.cpMIN; |
| case IGCCToken.tMAX: return Keywords.cpMAX; |
| |
| case CPreprocessor.tSPACE: return SPACE; |
| case CPreprocessor.tNOSPACE: return CharArrayUtils.EMPTY; |
| |
| default: |
| return CharArrayUtils.EMPTY; |
| } |
| } |
| |
| public static char[] getDigraphImage(int type) { |
| switch (type) { |
| case IToken.tPOUND: return DIGRAPH_POUND; |
| case IToken.tPOUNDPOUND: return DIGRAPH_POUNDPOUND; |
| case IToken.tLBRACKET: return DIGRAPH_LBRACKET; |
| case IToken.tRBRACKET: return DIGRAPH_RBRACKET; |
| case IToken.tLBRACE: return DIGRAPH_LBRACE; |
| case IToken.tRBRACE: return DIGRAPH_RBRACE; |
| |
| default: |
| assert false: type; |
| return CharArrayUtils.EMPTY; |
| } |
| } |
| } |