166 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) 2007 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *      http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| #ifndef AMEND_AST_H_
 | |
| #define AMEND_AST_H_
 | |
| 
 | |
| #include "commands.h"
 | |
| 
 | |
| typedef struct AmStringValue AmStringValue;
 | |
| 
 | |
| typedef struct {
 | |
|     int argc;
 | |
|     AmStringValue *argv;
 | |
| } AmFunctionArguments;
 | |
| 
 | |
| /* An internal structure used only by the parser;
 | |
|  * will not appear in the output AST.
 | |
| xxx try to move this into parser.h
 | |
|  */
 | |
| typedef struct AmFunctionArgumentBuilder AmFunctionArgumentBuilder;
 | |
| struct AmFunctionArgumentBuilder {
 | |
|     AmFunctionArgumentBuilder *next;
 | |
|     AmStringValue *arg;
 | |
|     int argCount;
 | |
| };
 | |
| 
 | |
| typedef struct AmWordListBuilder AmWordListBuilder;
 | |
| struct AmWordListBuilder {
 | |
|     AmWordListBuilder *next;
 | |
|     const char *word;
 | |
|     int wordCount;
 | |
| };
 | |
| 
 | |
| typedef struct {
 | |
|     const char *name;
 | |
|     Function *fn;
 | |
|     AmFunctionArguments *args;
 | |
| } AmFunctionCall;
 | |
| 
 | |
| 
 | |
| /* <string-value> ::=
 | |
|  *      <literal-string> |
 | |
|  *      <function-call>
 | |
|  */
 | |
| struct AmStringValue {
 | |
|     unsigned int line;
 | |
| 
 | |
|     enum {
 | |
|         AM_SVAL_LITERAL,
 | |
|         AM_SVAL_FUNCTION,
 | |
|     } type;
 | |
|     union {
 | |
|         const char *literal;
 | |
| //xxx inline instead of using pointers
 | |
|         AmFunctionCall *function;
 | |
|     } u;
 | |
| };
 | |
| 
 | |
| 
 | |
| /* <string-comparison-expression> ::=
 | |
|  *      <string-value> <string-comparison-operator> <string-value>
 | |
|  */
 | |
| typedef struct {
 | |
|     unsigned int line;
 | |
| 
 | |
|     enum {
 | |
|         AM_SOP_LT,
 | |
|         AM_SOP_LE,
 | |
|         AM_SOP_GT,
 | |
|         AM_SOP_GE,
 | |
|         AM_SOP_EQ,
 | |
|         AM_SOP_NE,
 | |
|     } op;
 | |
|     AmStringValue *arg1;
 | |
|     AmStringValue *arg2;
 | |
| } AmStringComparisonExpression;
 | |
| 
 | |
| 
 | |
| /* <boolean-expression> ::=
 | |
|  *      ! <boolean-value> |
 | |
|  *      <boolean-value> <binary-boolean-operator> <boolean-value>
 | |
|  */
 | |
| typedef struct AmBooleanValue AmBooleanValue;
 | |
| typedef struct {
 | |
|     unsigned int line;
 | |
| 
 | |
|     enum {
 | |
|         AM_BOP_NOT,
 | |
| 
 | |
|         AM_BOP_EQ,
 | |
|         AM_BOP_NE,
 | |
| 
 | |
|         AM_BOP_AND,
 | |
| 
 | |
|         AM_BOP_OR,
 | |
|     } op;
 | |
|     AmBooleanValue *arg1;
 | |
|     AmBooleanValue *arg2;
 | |
| } AmBooleanExpression;
 | |
| 
 | |
| 
 | |
| /* <boolean-value> ::=
 | |
|  *      <boolean-expression> |
 | |
|  *      <string-comparison-expression>
 | |
|  */
 | |
| struct AmBooleanValue {
 | |
|     unsigned int line;
 | |
| 
 | |
|     enum {
 | |
|         AM_BVAL_EXPRESSION,
 | |
|         AM_BVAL_STRING_COMPARISON,
 | |
|     } type;
 | |
|     union {
 | |
|         AmBooleanExpression expression;
 | |
|         AmStringComparisonExpression stringComparison;
 | |
|     } u;
 | |
| };
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|     unsigned int line;
 | |
| 
 | |
|     int argc;
 | |
|     const char **argv;
 | |
| } AmWordList;
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|     bool booleanArgs;
 | |
|     union {
 | |
|         AmWordList *w;
 | |
|         AmBooleanValue *b;
 | |
|     } u;
 | |
| } AmCommandArguments;
 | |
| 
 | |
| typedef struct {
 | |
|     unsigned int line;
 | |
| 
 | |
|     const char *name;
 | |
|     Command *cmd;
 | |
|     AmCommandArguments *args;
 | |
| } AmCommand;
 | |
| 
 | |
| typedef struct {
 | |
|     AmCommand **commands;
 | |
|     int commandCount;
 | |
|     int arraySize;
 | |
| } AmCommandList;
 | |
| 
 | |
| void dumpCommandList(const AmCommandList *commandList);
 | |
| 
 | |
| #endif  // AMEND_AST_H_
 |