|
@ -35,17 +35,17 @@ |
|
|
|
|
|
|
|
|
#define META_PROTO_MAX t_Try |
|
|
#define META_PROTO_MAX t_Try |
|
|
|
|
|
|
|
|
#define DO_C_PROTOS() \ |
|
|
|
|
|
_DO(Comment) _DO(Token) \ |
|
|
|
|
|
_DO(C_declaration) _DO(C_stringLiteral) \ |
|
|
|
|
|
|
|
|
#define DO_C_PROTOS() \ |
|
|
|
|
|
_DO(Comment) _DO(Token) \ |
|
|
|
|
|
_DO(C_declaration) _DO(C_stringLiteral) \ |
|
|
_DO(C_if) _DO(C_int) _DO(C_float) _DO(C_string) _DO(C_char) _DO(C_id) _DO(C_while) _DO(C_do) _DO(C_for) \ |
|
|
_DO(C_if) _DO(C_int) _DO(C_float) _DO(C_string) _DO(C_char) _DO(C_id) _DO(C_while) _DO(C_do) _DO(C_for) \ |
|
|
_DO(C_binary) _DO(C_initializer) _DO(C_range) _DO(C_conditional) _DO(C_index) \ |
|
|
|
|
|
_DO(C_designation) _DO(C_attribution) _DO(C_deref) _DO(C_block) _DO(C_call) _DO(C_subexpr) \ |
|
|
|
|
|
_DO(C_array) _DO(C_parameter) _DO(C_typeOf) _DO(C_unary) _DO(C_prefix) _DO(C_alignOf) \ |
|
|
|
|
|
_DO(C_sizeOf) _DO(C_cast) _DO(C_attributeSpec) _DO(C_asm) _DO(C_asmExpr) _DO(C_asmExprArg) \ |
|
|
|
|
|
_DO(C_aggregate) _DO(C_attribute) _DO(C_postfix) _DO(C_compound) _DO(C_functionDef) \ |
|
|
|
|
|
_DO(C_exprStatement) _DO(C_switch) _DO(C_goto) _DO(C_continue) _DO(C_break) _DO(C_return) \ |
|
|
|
|
|
_DO(C_case) _DO(C_default) _DO(C_label) _DO(C_labelDeclaration) _DO(C_structSpec) \ |
|
|
|
|
|
|
|
|
_DO(C_binary) _DO(C_initializer) _DO(C_range) _DO(C_conditional) _DO(C_index) \ |
|
|
|
|
|
_DO(C_designation) _DO(C_attribution) _DO(C_deref) _DO(C_block) _DO(C_call) _DO(C_subexpr) \ |
|
|
|
|
|
_DO(C_array) _DO(C_parameter) _DO(C_typeOf) _DO(C_unary) _DO(C_prefix) _DO(C_alignOf) \ |
|
|
|
|
|
_DO(C_sizeOf) _DO(C_cast) _DO(C_attributeSpec) _DO(C_asm) _DO(C_asmExpr) _DO(C_asmExprArg) \ |
|
|
|
|
|
_DO(C_aggregate) _DO(C_attribute) _DO(C_postfix) _DO(C_compound) _DO(C_functionDef) \ |
|
|
|
|
|
_DO(C_exprStatement) _DO(C_switch) _DO(C_goto) _DO(C_continue) _DO(C_break) _DO(C_return) \ |
|
|
|
|
|
_DO(C_case) _DO(C_default) _DO(C_label) _DO(C_labelDeclaration) _DO(C_structSpec) \ |
|
|
_DO(C_structDeclarator) _DO(C_enumSpec) _DO(C_enum) |
|
|
_DO(C_structDeclarator) _DO(C_enumSpec) _DO(C_enum) |
|
|
|
|
|
|
|
|
typedef enum { |
|
|
typedef enum { |
|
@ -1367,7 +1367,7 @@ integerConstant = < ( hexadecimalConstant |
|
|
| binaryConstant &{gnu} |
|
|
| binaryConstant &{gnu} |
|
|
| decimalConstant |
|
|
| decimalConstant |
|
|
) integerSuffix? |
|
|
) integerSuffix? |
|
|
> { $$ = new_C_int(yytext); } - |
|
|
|
|
|
|
|
|
> { $$= new_C_int(yytext); } - |
|
|
|
|
|
|
|
|
decimalConstant = [1-9][0-9]* |
|
|
decimalConstant = [1-9][0-9]* |
|
|
|
|
|
|
|
@ -1389,7 +1389,7 @@ imaginarySuffix = [ij] |
|
|
|
|
|
|
|
|
# 6.4.4.2 |
|
|
# 6.4.4.2 |
|
|
|
|
|
|
|
|
floatingConstant = <( decimalFloatingConstant | hexadecimalFloatingConstant )> { $$ = new_C_float(yytext); } - |
|
|
|
|
|
|
|
|
floatingConstant = <( decimalFloatingConstant | hexadecimalFloatingConstant )> { $$= new_C_float(yytext); } - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimalFloatingConstant = fractionalConstant exponentPart? floatingSuffix? |
|
|
decimalFloatingConstant = fractionalConstant exponentPart? floatingSuffix? |
|
@ -1416,8 +1416,8 @@ floatingSuffix = [fFlL] imaginarySuffix? |
|
|
|
|
|
|
|
|
# 6.4.4.4 |
|
|
# 6.4.4.4 |
|
|
|
|
|
|
|
|
characterConstant = < "'" cCharSequence "'" > { $$ = new_C_char(yytext) } - |
|
|
|
|
|
| < "L'" cCharSequence "'" > { $$ = new_C_char(yytext) } - |
|
|
|
|
|
|
|
|
characterConstant = < "'" cCharSequence "'" > { $$= new_C_char(yytext) } - |
|
|
|
|
|
| < "L'" cCharSequence "'" > { $$= new_C_char(yytext) } - |
|
|
|
|
|
|
|
|
cCharSequence = ( escapeSequence | !EOL [^\'\\] )* #' |
|
|
cCharSequence = ( escapeSequence | !EOL [^\'\\] )* #' |
|
|
|
|
|
|
|
@ -1928,7 +1928,7 @@ jumpStatement = g:GOTO i:id t:SEMI { $$= new_C_goto(g, |
|
|
|
|
|
|
|
|
## translationUnit = externalDeclaration+ |
|
|
## translationUnit = externalDeclaration+ |
|
|
|
|
|
|
|
|
externalDeclaration = <Space+> { $$ = newComment(yytext); } |
|
|
|
|
|
|
|
|
externalDeclaration = <Space+> { $$= newComment(yytext); } |
|
|
| ( SEMI &{gnu} |
|
|
| ( SEMI &{gnu} |
|
|
| declaration |
|
|
| declaration |
|
|
| functionDefinition |
|
|
| functionDefinition |
|
@ -2038,197 +2038,196 @@ stringLiteralList = s:stringLiteral { listWith(s) } |
|
|
( c:COMMA s:stringLiteral { listAppend2(c, s) } |
|
|
( c:COMMA s:stringLiteral { listAppend2(c, s) } |
|
|
)* { $$= listEnd() } |
|
|
)* { $$= listEnd() } |
|
|
|
|
|
|
|
|
ids = i:id { listWith(i) } |
|
|
|
|
|
( c:COMMA i:id { listAppend2(c, i) } |
|
|
|
|
|
)* { $$= listEnd() } |
|
|
|
|
|
|
|
|
ids = i:id { listWith(i) } |
|
|
|
|
|
( c:COMMA i:id { listAppend2(c, i) } |
|
|
|
|
|
)* { $$= listEnd() } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### |
|
|
### |
|
|
|
|
|
|
|
|
ASSIGN = '=' !'=' { $$= newToken("=" ) } - |
|
|
|
|
|
COLON = ':' { $$= newToken(":" ) } - |
|
|
|
|
|
COMMA = ',' { $$= newToken("," ) } - |
|
|
|
|
|
QUESTION = '?' { $$= newToken("?" ) } - |
|
|
|
|
|
SEMI = ';' { $$= newToken(";" ) } - |
|
|
|
|
|
|
|
|
|
|
|
PTR = "->" { $$= newToken("->" ) } - |
|
|
|
|
|
|
|
|
|
|
|
DOT = '.' !'.' { $$= newToken("." ) } - |
|
|
|
|
|
ELLIPSIS = '...' { $$= newToken("..." ) } - |
|
|
|
|
|
|
|
|
|
|
|
LPAREN = '(' { $$= newToken("(" ) } - |
|
|
|
|
|
RPAREN = ')' { $$= newToken(")" ) } - |
|
|
|
|
|
LBRACKET = '[' { $$= newToken("[" ) } - |
|
|
|
|
|
RBRACKET = ']' { $$= newToken("]" ) } - |
|
|
|
|
|
LCURLY = '{' { $$= newBegin( ) } - |
|
|
|
|
|
RCURLY = '}' { $$= newEnd ( ) } - |
|
|
|
|
|
|
|
|
|
|
|
EQUAL = "==" { $$= newToken("==" ) } - |
|
|
|
|
|
NOT_EQUAL = "!=" { $$= newToken("!=" ) } - |
|
|
|
|
|
LTE = "<=" { $$= newToken("<=" ) } - |
|
|
|
|
|
LT = "<" !'=' { $$= newToken("<" ) } - |
|
|
|
|
|
GTE = ">=" { $$= newToken(">=" ) } - |
|
|
|
|
|
GT = ">" !'=' { $$= newToken(">" ) } - |
|
|
|
|
|
|
|
|
|
|
|
DIV = '/' ![=*] { $$= newToken("/" ) } - |
|
|
|
|
|
DIV_ASSIGN = "/=" { $$= newToken("/=" ) } - |
|
|
|
|
|
PLUS = '+' ![+=] { $$= newToken("+" ) } - |
|
|
|
|
|
PLUS_ASSIGN = "+=" { $$= newToken("+=" ) } - |
|
|
|
|
|
INC = "++" { $$= newToken("++" ) } - |
|
|
|
|
|
MINUS = '-' ![-=] { $$= newToken("-" ) } - |
|
|
|
|
|
MINUS_ASSIGN = "-=" { $$= newToken("-=" ) } - |
|
|
|
|
|
DEC = "--" { $$= newToken("--" ) } - |
|
|
|
|
|
STAR = '*' !'=' { $$= newToken("*" ) } - |
|
|
|
|
|
STAR_ASSIGN = "*=" { $$= newToken("*=" ) } - |
|
|
|
|
|
MOD = '%' !'=' { $$= newToken("%" ) } - |
|
|
|
|
|
MOD_ASSIGN = "%=" { $$= newToken("%=" ) } - |
|
|
|
|
|
RSHIFT = ">>" !'=' { $$= newToken(">>" ) } - |
|
|
|
|
|
RSHIFT_ASSIGN = ">>=" { $$= newToken(">>=" ) } - |
|
|
|
|
|
LSHIFT = "<<" !'=' { $$= newToken("<<" ) } - |
|
|
|
|
|
LSHIFT_ASSIGN = "<<=" { $$= newToken("<<=" ) } - |
|
|
|
|
|
|
|
|
|
|
|
LAND = "&&" { $$= newToken("&&" ) } - |
|
|
|
|
|
LNOT = '!' !'=' { $$= newToken("!" ) } - |
|
|
|
|
|
LOR = "||" { $$= newToken("||" ) } - |
|
|
|
|
|
|
|
|
|
|
|
BAND = '&' ![&=] { $$= newToken("&" ) } - |
|
|
|
|
|
BAND_ASSIGN = "&=" { $$= newToken("&=" ) } - |
|
|
|
|
|
BNOT = '~' { $$= newToken("~" ) } - |
|
|
|
|
|
BOR = '|' ![|=] { $$= newToken("|" ) } - |
|
|
|
|
|
BOR_ASSIGN = "|=" { $$= newToken("|=" ) } - |
|
|
|
|
|
BXOR = '^' !'=' { $$= newToken("^" ) } - |
|
|
|
|
|
BXOR_ASSIGN = "^=" { $$= newToken("^=" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ALIGNOF = '__alignof__' !IDREST { $$= newToken("__alignof__" ) } - |
|
|
|
|
|
| '__alignof' !IDREST { $$= newToken("__alignof" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ASM = 'asm' !IDREST { $$= newToken("asm" ) } - |
|
|
|
|
|
| '__asm' !IDREST { $$= newToken("__asm" ) } - |
|
|
|
|
|
| '__asm__' !IDREST { $$= newToken("__asm__" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ATTRIBUTE = '__attribute__' !IDREST { $$= newToken("__attribute__") } - |
|
|
|
|
|
AUTO = 'auto' !IDREST { $$= newToken("auto" ) } - |
|
|
|
|
|
BOOL = '_Bool' !IDREST { $$= newToken("_Bool" ) } - |
|
|
|
|
|
BREAK = 'break' !IDREST { $$= newToken("break" ) } - |
|
|
|
|
|
CASE = 'case' !IDREST { $$= newToken("case" ) } - |
|
|
|
|
|
CHAR = 'char' !IDREST { $$= newToken("char" ) } - |
|
|
|
|
|
COMPLEX = '_Complex' !IDREST { $$= newToken("_Complex" ) } - |
|
|
|
|
|
| '__complex__' !IDREST &{gnu} { $$= newToken("__complex__" ) } - |
|
|
|
|
|
CONST = 'const' !IDREST { $$= newToken("const" ) } - |
|
|
|
|
|
| '__const' !IDREST { $$= newToken("__const" ) } - |
|
|
|
|
|
CONTINUE = 'continue' !IDREST { $$= newToken("continue" ) } - |
|
|
|
|
|
DEFAULT = 'default' !IDREST { $$= newToken("default" ) } - |
|
|
|
|
|
DO = 'do' !IDREST { $$= newToken("do" ) } - |
|
|
|
|
|
DOUBLE = 'double' !IDREST { $$= newToken("double" ) } - |
|
|
|
|
|
ELSE = 'else' !IDREST { $$= newToken("else" ) } - |
|
|
|
|
|
ENUM = 'enum' !IDREST { $$= newToken("enum" ) } - |
|
|
|
|
|
EXTERN = 'extern' !IDREST { $$= newToken("extern" ) } - |
|
|
|
|
|
FLOAT = 'float' !IDREST { $$= newToken("float" ) } - |
|
|
|
|
|
FOR = 'for' !IDREST { $$= newToken("for" ) } - |
|
|
|
|
|
GOTO = 'goto' !IDREST { $$= newToken("goto" ) } - |
|
|
|
|
|
IF = 'if' !IDREST { $$= newToken("if" ) } - |
|
|
|
|
|
INLINE = 'inline' !IDREST { $$= newToken("inline" ) } - |
|
|
|
|
|
| '__inline__' !IDREST &{gnu} { $$= newToken("__inline__" ) } - |
|
|
|
|
|
INT = 'int' !IDREST { $$= newToken("int" ) } - |
|
|
|
|
|
LONG = 'long' !IDREST { $$= newToken("long" ) } - |
|
|
|
|
|
REGISTER = 'register' !IDREST { $$= newToken("register" ) } - |
|
|
|
|
|
RESTRICT = 'restrict' !IDREST { $$= newToken("restrict" ) } - |
|
|
|
|
|
RETURN = 'return' !IDREST { $$= newToken("return" ) } - |
|
|
|
|
|
SHORT = 'short' !IDREST { $$= newToken("short" ) } - |
|
|
|
|
|
SIGNED = 'signed' !IDREST { $$= newToken("signed" ) } - |
|
|
|
|
|
SIZEOF = 'sizeof' !IDREST { $$= newToken("sizeof" ) } - |
|
|
|
|
|
STATIC = 'static' !IDREST { $$= newToken("static" ) } - |
|
|
|
|
|
STRUCT = 'struct' !IDREST { $$= newToken("struct" ) } - |
|
|
|
|
|
SWITCH = 'switch' !IDREST { $$= newToken("switch" ) } - |
|
|
|
|
|
TYPEDEF = 'typedef' !IDREST { $$= newToken("typedef" ) } - |
|
|
|
|
|
TYPEOF = 'typeof' !IDREST { $$= newToken("typeof" ) } - |
|
|
|
|
|
| '__typeof__' !IDREST { $$= newToken("__typeof__" ) } - |
|
|
|
|
|
UNION = 'union' !IDREST { $$= newToken("union" ) } - |
|
|
|
|
|
UNSIGNED = 'unsigned' !IDREST { $$= newToken("unsigned" ) } - |
|
|
|
|
|
VOID = 'void' !IDREST { $$= newToken("void" ) } - |
|
|
|
|
|
VOLATILE = 'volatile' !IDREST { $$= newToken("volatile" ) } - |
|
|
|
|
|
WHILE = 'while' !IDREST { $$= newToken("while" ) } - |
|
|
|
|
|
|
|
|
|
|
|
IMAG = '__imag__' !IDREST &{gnu} { $$= newToken("__imag__" ) } - |
|
|
|
|
|
LABEL = '__label__' !IDREST &{gnu} { $$= newToken("__label__") } - |
|
|
|
|
|
REAL = '__real__' !IDREST &{gnu} { $$= newToken("__real__" ) } - |
|
|
|
|
|
|
|
|
|
|
|
BUILTIN_VA_LIST = '__builtin_va_list' !IDREST &{gnu} { $$= newToken("__builtin_va_list" ) } - |
|
|
|
|
|
__RESTRICT = '__restrict' !IDREST &{gnu} { $$= newToken("__restrict" ) } - |
|
|
|
|
|
__INLINE = '__inline' !IDREST &{gnu} { $$= newToken("__inline" ) } - |
|
|
|
|
|
_FLOAT128 = '_Float128' !IDREST &{gnu} { $$= newToken("_Float128" ) } - |
|
|
|
|
|
|
|
|
ASSIGN = '=' !'=' { $$= newToken("=" ) } - |
|
|
|
|
|
COLON = ':' { $$= newToken(":" ) } - |
|
|
|
|
|
COMMA = ',' { $$= newToken("," ) } - |
|
|
|
|
|
QUESTION = '?' { $$= newToken("?" ) } - |
|
|
|
|
|
SEMI = ';' { $$= newToken(";" ) } - |
|
|
|
|
|
|
|
|
|
|
|
PTR = "->" { $$= newToken("->" ) } - |
|
|
|
|
|
|
|
|
|
|
|
DOT = '.' !'.' { $$= newToken("." ) } - |
|
|
|
|
|
ELLIPSIS = '...' { $$= newToken("..." ) } - |
|
|
|
|
|
|
|
|
|
|
|
LPAREN = '(' { $$= newToken("(" ) } - |
|
|
|
|
|
RPAREN = ')' { $$= newToken(")" ) } - |
|
|
|
|
|
LBRACKET = '[' { $$= newToken("[" ) } - |
|
|
|
|
|
RBRACKET = ']' { $$= newToken("]" ) } - |
|
|
|
|
|
LCURLY = '{' { $$= newBegin( ) } - |
|
|
|
|
|
RCURLY = '}' { $$= newEnd ( ) } - |
|
|
|
|
|
|
|
|
|
|
|
EQUAL = "==" { $$= newToken("==" ) } - |
|
|
|
|
|
NOT_EQUAL = "!=" { $$= newToken("!=" ) } - |
|
|
|
|
|
LTE = "<=" { $$= newToken("<=" ) } - |
|
|
|
|
|
LT = "<" !'=' { $$= newToken("<" ) } - |
|
|
|
|
|
GTE = ">=" { $$= newToken(">=" ) } - |
|
|
|
|
|
GT = ">" !'=' { $$= newToken(">" ) } - |
|
|
|
|
|
|
|
|
|
|
|
DIV = '/' ![=*] { $$= newToken("/" ) } - |
|
|
|
|
|
DIV_ASSIGN = "/=" { $$= newToken("/=" ) } - |
|
|
|
|
|
PLUS = '+' ![+=] { $$= newToken("+" ) } - |
|
|
|
|
|
PLUS_ASSIGN = "+=" { $$= newToken("+=" ) } - |
|
|
|
|
|
INC = "++" { $$= newToken("++" ) } - |
|
|
|
|
|
MINUS = '-' ![-=] { $$= newToken("-" ) } - |
|
|
|
|
|
MINUS_ASSIGN = "-=" { $$= newToken("-=" ) } - |
|
|
|
|
|
DEC = "--" { $$= newToken("--" ) } - |
|
|
|
|
|
STAR = '*' !'=' { $$= newToken("*" ) } - |
|
|
|
|
|
STAR_ASSIGN = "*=" { $$= newToken("*=" ) } - |
|
|
|
|
|
MOD = '%' !'=' { $$= newToken("%" ) } - |
|
|
|
|
|
MOD_ASSIGN = "%=" { $$= newToken("%=" ) } - |
|
|
|
|
|
RSHIFT = ">>" !'=' { $$= newToken(">>" ) } - |
|
|
|
|
|
RSHIFT_ASSIGN = ">>=" { $$= newToken(">>=" ) } - |
|
|
|
|
|
LSHIFT = "<<" !'=' { $$= newToken("<<" ) } - |
|
|
|
|
|
LSHIFT_ASSIGN = "<<=" { $$= newToken("<<=" ) } - |
|
|
|
|
|
|
|
|
|
|
|
LAND = "&&" { $$= newToken("&&" ) } - |
|
|
|
|
|
LNOT = '!' !'=' { $$= newToken("!" ) } - |
|
|
|
|
|
LOR = "||" { $$= newToken("||" ) } - |
|
|
|
|
|
|
|
|
|
|
|
BAND = '&' ![&=] { $$= newToken("&" ) } - |
|
|
|
|
|
BAND_ASSIGN = "&=" { $$= newToken("&=" ) } - |
|
|
|
|
|
BNOT = '~' { $$= newToken("~" ) } - |
|
|
|
|
|
BOR = '|' ![|=] { $$= newToken("|" ) } - |
|
|
|
|
|
BOR_ASSIGN = "|=" { $$= newToken("|=" ) } - |
|
|
|
|
|
BXOR = '^' !'=' { $$= newToken("^" ) } - |
|
|
|
|
|
BXOR_ASSIGN = "^=" { $$= newToken("^=" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ALIGNOF = '__alignof__' !IDREST { $$= newToken("__alignof__" ) } - |
|
|
|
|
|
| '__alignof' !IDREST { $$= newToken("__alignof" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ASM = 'asm' !IDREST { $$= newToken("asm" ) } - |
|
|
|
|
|
| '__asm' !IDREST { $$= newToken("__asm" ) } - |
|
|
|
|
|
| '__asm__' !IDREST { $$= newToken("__asm__" ) } - |
|
|
|
|
|
|
|
|
|
|
|
ATTRIBUTE = '__attribute__' !IDREST { $$= newToken("__attribute__" ) } - |
|
|
|
|
|
AUTO = 'auto' !IDREST { $$= newToken("auto" ) } - |
|
|
|
|
|
BOOL = '_Bool' !IDREST { $$= newToken("_Bool" ) } - |
|
|
|
|
|
BREAK = 'break' !IDREST { $$= newToken("break" ) } - |
|
|
|
|
|
CASE = 'case' !IDREST { $$= newToken("case" ) } - |
|
|
|
|
|
CHAR = 'char' !IDREST { $$= newToken("char" ) } - |
|
|
|
|
|
COMPLEX = '_Complex' !IDREST { $$= newToken("_Complex" ) } - |
|
|
|
|
|
| '__complex__' !IDREST &{gnu} { $$= newToken("__complex__" ) } - |
|
|
|
|
|
CONST = 'const' !IDREST { $$= newToken("const" ) } - |
|
|
|
|
|
| '__const' !IDREST { $$= newToken("__const" ) } - |
|
|
|
|
|
CONTINUE = 'continue' !IDREST { $$= newToken("continue" ) } - |
|
|
|
|
|
DEFAULT = 'default' !IDREST { $$= newToken("default" ) } - |
|
|
|
|
|
DO = 'do' !IDREST { $$= newToken("do" ) } - |
|
|
|
|
|
DOUBLE = 'double' !IDREST { $$= newToken("double" ) } - |
|
|
|
|
|
ELSE = 'else' !IDREST { $$= newToken("else" ) } - |
|
|
|
|
|
ENUM = 'enum' !IDREST { $$= newToken("enum" ) } - |
|
|
|
|
|
EXTERN = 'extern' !IDREST { $$= newToken("extern" ) } - |
|
|
|
|
|
FLOAT = 'float' !IDREST { $$= newToken("float" ) } - |
|
|
|
|
|
FOR = 'for' !IDREST { $$= newToken("for" ) } - |
|
|
|
|
|
GOTO = 'goto' !IDREST { $$= newToken("goto" ) } - |
|
|
|
|
|
IF = 'if' !IDREST { $$= newToken("if" ) } - |
|
|
|
|
|
INLINE = 'inline' !IDREST { $$= newToken("inline" ) } - |
|
|
|
|
|
| '__inline__' !IDREST &{gnu} { $$= newToken("__inline__" ) } - |
|
|
|
|
|
INT = 'int' !IDREST { $$= newToken("int" ) } - |
|
|
|
|
|
LONG = 'long' !IDREST { $$= newToken("long" ) } - |
|
|
|
|
|
REGISTER = 'register' !IDREST { $$= newToken("register" ) } - |
|
|
|
|
|
RESTRICT = 'restrict' !IDREST { $$= newToken("restrict" ) } - |
|
|
|
|
|
RETURN = 'return' !IDREST { $$= newToken("return" ) } - |
|
|
|
|
|
SHORT = 'short' !IDREST { $$= newToken("short" ) } - |
|
|
|
|
|
SIGNED = 'signed' !IDREST { $$= newToken("signed" ) } - |
|
|
|
|
|
SIZEOF = 'sizeof' !IDREST { $$= newToken("sizeof" ) } - |
|
|
|
|
|
STATIC = 'static' !IDREST { $$= newToken("static" ) } - |
|
|
|
|
|
STRUCT = 'struct' !IDREST { $$= newToken("struct" ) } - |
|
|
|
|
|
SWITCH = 'switch' !IDREST { $$= newToken("switch" ) } - |
|
|
|
|
|
TYPEDEF = 'typedef' !IDREST { $$= newToken("typedef" ) } - |
|
|
|
|
|
TYPEOF = 'typeof' !IDREST { $$= newToken("typeof" ) } - |
|
|
|
|
|
| '__typeof__' !IDREST { $$= newToken("__typeof__" ) } - |
|
|
|
|
|
UNION = 'union' !IDREST { $$= newToken("union" ) } - |
|
|
|
|
|
UNSIGNED = 'unsigned' !IDREST { $$= newToken("unsigned" ) } - |
|
|
|
|
|
VOID = 'void' !IDREST { $$= newToken("void" ) } - |
|
|
|
|
|
VOLATILE = 'volatile' !IDREST { $$= newToken("volatile" ) } - |
|
|
|
|
|
WHILE = 'while' !IDREST { $$= newToken("while" ) } - |
|
|
|
|
|
|
|
|
|
|
|
IMAG = '__imag__' !IDREST &{gnu} { $$= newToken("__imag__" ) } - |
|
|
|
|
|
LABEL = '__label__' !IDREST &{gnu} { $$= newToken("__label__" ) } - |
|
|
|
|
|
REAL = '__real__' !IDREST &{gnu} { $$= newToken("__real__" ) } - |
|
|
|
|
|
|
|
|
|
|
|
BUILTIN_VA_LIST = '__builtin_va_list' !IDREST &{gnu} { $$= newToken("__builtin_va_list" ) } - |
|
|
|
|
|
__RESTRICT = '__restrict' !IDREST &{gnu} { $$= newToken("__restrict" ) } - |
|
|
|
|
|
__INLINE = '__inline' !IDREST &{gnu} { $$= newToken("__inline" ) } - |
|
|
|
|
|
_FLOAT128 = '_Float128' !IDREST &{gnu} { $$= newToken("_Float128" ) } - |
|
|
|
|
|
|
|
|
#--------------------------------------------- Meta grammar ----------------------------------------------# |
|
|
#--------------------------------------------- Meta grammar ----------------------------------------------# |
|
|
|
|
|
|
|
|
# the semicolon has to be explicit with no space eaten afterwards to prevent the |
|
|
# the semicolon has to be explicit with no space eaten afterwards to prevent the |
|
|
# input buffer from moving past it before redirecting input from the imported file |
|
|
# input buffer from moving past it before redirecting input from the imported file |
|
|
|
|
|
|
|
|
metaCatch = META_AT ( META_IMPORT s:META_STRING ";" { inputStackPush(get(s, String, value)) ; $$ = 0 } |
|
|
|
|
|
| m:mvalue { $$ = m } |
|
|
|
|
|
| META_LCB s:mstmts { map_append(outputProgram, s); $$ = null } |
|
|
|
|
|
|
|
|
metaCatch = META_AT ( META_IMPORT s:META_STRING ";" { inputStackPush(get(s, String, value)) ; $$= 0 } |
|
|
|
|
|
| m:mvalue { $$= m } |
|
|
|
|
|
| META_LCB s:mstmts { map_append(outputProgram, s); $$= null } |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mvalue = i:META_IDENT { $$ = eval(globals, newGetVariable(i)) } |
|
|
|
|
|
|
|
|
mvalue = i:META_IDENT { $$= eval(globals, newGetVariable(i)) } |
|
|
| META_LPAREN ( i:MO_OPERATION |
|
|
| META_LPAREN ( i:MO_OPERATION |
|
|
#| i:meta_block usefull ? |
|
|
#| i:meta_block usefull ? |
|
|
| i:meta_exp |
|
|
| i:meta_exp |
|
|
) META_RPAREN { $$ = eval(globals, i) } |
|
|
|
|
|
|
|
|
) META_RPAREN { $$= eval(globals, i) } |
|
|
|
|
|
|
|
|
mstmts = ( s:eval_stmt )* ( META_NIL META_SEMICOLON META_RCB { $$ = null } |
|
|
|
|
|
| META_RCB { $$ = s } |
|
|
|
|
|
|
|
|
mstmts = ( s:eval_stmt )* ( META_NIL META_SEMICOLON META_RCB { $$= null } |
|
|
|
|
|
| META_RCB { $$= s } |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
eval_stmt = s:meta_stmt { $$ = eval(globals, s) } |
|
|
|
|
|
|
|
|
|
|
|
meta_stmt = s:meta_block { $$ = s } |
|
|
|
|
|
| META_SEMICOLON { $$ = null } |
|
|
|
|
|
| l:META_IDENT p:meta_paramList e:meta_block { $$ = newFunc(l, p, e, null) } |
|
|
|
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt META_ELSE f:meta_stmt { $$ = newIf(c, t, f ) } |
|
|
|
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt { $$ = newIf(c, t, null) } |
|
|
|
|
|
| META_WHILE META_LPAREN c:meta_exp META_RPAREN s:meta_stmt { $$ = newWhile(c, s) } |
|
|
|
|
|
| META_DO s:meta_stmt META_WHILE META_LPAREN c:meta_exp META_RPAREN { $$ = newDo(s, c) } |
|
|
|
|
|
| META_FOR META_LPAREN i:meta_ident META_IN e:meta_exp META_RPAREN s:meta_stmt { $$ = newForIn(i, e, s) } |
|
|
|
|
|
| META_FOR META_LPAREN i:meta_stmt c:meta_stmt u:meta_exp META_RPAREN s:meta_stmt { $$ = newFor(i, c, u, s) } |
|
|
|
|
|
| s:meta_switch { $$ = s } |
|
|
|
|
|
| META_RETURN e:meta_exp { $$ = newReturn(e) } |
|
|
|
|
|
| META_RETURN { $$ = newReturn(null) } |
|
|
|
|
|
| META_BREAK { $$ = newBreak() } |
|
|
|
|
|
| META_CONTINUE { $$ = newContinue() } |
|
|
|
|
|
| META_THROW e:meta_exp { $$ = newUnary(Throw_proto, e) } |
|
|
|
|
|
| t:meta_try { $$ = t } |
|
|
|
|
|
| e:meta_exp META_SEMICOLON { $$ = e } |
|
|
|
|
|
|
|
|
eval_stmt = s:meta_stmt { $$= eval(globals, s) } |
|
|
|
|
|
|
|
|
|
|
|
meta_stmt = s:meta_block { $$= s } |
|
|
|
|
|
| META_SEMICOLON { $$= null } |
|
|
|
|
|
| l:META_IDENT p:meta_paramList e:meta_block { $$= newFunc(l, p, e, null) } |
|
|
|
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt META_ELSE f:meta_stmt { $$= newIf(c, t, f ) } |
|
|
|
|
|
| META_IF META_LPAREN c:meta_exp META_RPAREN t:meta_stmt { $$= newIf(c, t, null) } |
|
|
|
|
|
| META_WHILE META_LPAREN c:meta_exp META_RPAREN s:meta_stmt { $$= newWhile(c, s) } |
|
|
|
|
|
| META_DO s:meta_stmt META_WHILE META_LPAREN c:meta_exp META_RPAREN { $$= newDo(s, c) } |
|
|
|
|
|
| META_FOR META_LPAREN i:meta_ident META_IN e:meta_exp META_RPAREN s:meta_stmt { $$= newForIn(i, e, s) } |
|
|
|
|
|
| META_FOR META_LPAREN i:meta_stmt c:meta_stmt u:meta_exp META_RPAREN s:meta_stmt { $$= newFor(i, c, u, s) } |
|
|
|
|
|
| s:meta_switch { $$= s } |
|
|
|
|
|
| META_RETURN e:meta_exp { $$= newReturn(e) } |
|
|
|
|
|
| META_RETURN { $$= newReturn(null) } |
|
|
|
|
|
| META_BREAK { $$= newBreak() } |
|
|
|
|
|
| META_CONTINUE { $$= newContinue() } |
|
|
|
|
|
| META_THROW e:meta_exp { $$= newUnary(Throw_proto, e) } |
|
|
|
|
|
| t:meta_try { $$= t } |
|
|
|
|
|
| e:meta_exp META_SEMICOLON { $$= e } |
|
|
|
|
|
|
|
|
meta_block = META_LCB m:meta_makeMap |
|
|
meta_block = META_LCB m:meta_makeMap |
|
|
( s:meta_stmt { map_append(m, s) } |
|
|
( s:meta_stmt { map_append(m, s) } |
|
|
) * |
|
|
) * |
|
|
( s:meta_exp { map_append(m, s) } |
|
|
( s:meta_exp { map_append(m, s) } |
|
|
) ? |
|
|
) ? |
|
|
META_RCB { $$ = newBlock(m) } |
|
|
|
|
|
|
|
|
|
|
|
meta_exp = META_VAR l:meta_ident META_ASSIGN e:meta_exp { $$ = newDeclaration(l, e) } |
|
|
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList q:META_IDENT e:meta_block { $$ = (map_append(p, q), newFunc(l, p, e, makeInteger(2))) } |
|
|
|
|
|
# | META_SYNTAX p:meta_paramList q:META_IDENT e:meta_block { $$ = (map_append(p, q), newFunc(null, p, e, makeInteger(2))) } |
|
|
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList e:meta_block { $$ = newFunc(l, p, e, makeInteger(1)) } |
|
|
|
|
|
# | META_SYNTAX p:meta_paramList e:meta_block { $$ = newFunc(null, p, e, makeInteger(1)) } |
|
|
|
|
|
| l:META_IDENT o:meta_assignOp e:meta_exp { $$ = newAssign(Assign_proto, l, o, e) } |
|
|
|
|
|
| l:meta_postfix META_DOT i:META_IDENT o:meta_assignOp e:meta_exp { $$ = newSetMap(SetMember_proto, l, i, o, e) } |
|
|
|
|
|
| l:meta_postfix META_LBRAC i:meta_exp META_RBRAC o:meta_assignOp e:meta_exp { $$ = newSetMap(SetIndex_proto, l, i, o, e) } |
|
|
|
|
|
| l:meta_syntax2 a:meta_argumentList s:meta_block { $$ = (map_append(a, s), apply(globals, globals, l, a, a)) } |
|
|
|
|
|
| c:meta_cond { $$ = c } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
meta_ident = l:META_IDENT { $$ = l } |
|
|
|
|
|
# | META_AT n:meta_prefix { $$ = newUnary(Unquote_proto, n) } |
|
|
|
|
|
|
|
|
META_RCB { $$= newBlock(m) } |
|
|
|
|
|
|
|
|
|
|
|
meta_exp = META_VAR l:meta_ident META_ASSIGN e:meta_exp { $$= newDeclaration(l, e) } |
|
|
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList q:META_IDENT e:meta_block { $$= (map_append(p, q), newFunc(l, p, e, makeInteger(2))) } |
|
|
|
|
|
# | META_SYNTAX p:meta_paramList q:META_IDENT e:meta_block { $$= (map_append(p, q), newFunc(null, p, e, makeInteger(2))) } |
|
|
|
|
|
# | META_SYNTAX l:META_IDENT p:meta_paramList e:meta_block { $$= newFunc(l, p, e, makeInteger(1)) } |
|
|
|
|
|
# | META_SYNTAX p:meta_paramList e:meta_block { $$= newFunc(null, p, e, makeInteger(1)) } |
|
|
|
|
|
| l:META_IDENT o:meta_assignOp e:meta_exp { $$= newAssign(Assign_proto, l, o, e) } |
|
|
|
|
|
| l:meta_postfix META_DOT i:META_IDENT o:meta_assignOp e:meta_exp { $$= newSetMap(SetMember_proto, l, i, o, e) } |
|
|
|
|
|
| l:meta_postfix META_LBRAC i:meta_exp META_RBRAC o:meta_assignOp e:meta_exp { $$= newSetMap(SetIndex_proto, l, i, o, e) } |
|
|
|
|
|
| l:meta_syntax2 a:meta_argumentList s:meta_block { $$= (map_append(a, s), apply(globals, globals, l, a, a)) } |
|
|
|
|
|
| c:meta_cond { $$= c } |
|
|
|
|
|
|
|
|
|
|
|
meta_ident = l:META_IDENT { $$= l } |
|
|
|
|
|
# | META_AT n:meta_prefix { $$= newUnary(Unquote_proto, n) } |
|
|
|
|
|
|
|
|
meta_syntax2 = < [a-zA-Z_][a-zA-Z0-9_]* > |
|
|
meta_syntax2 = < [a-zA-Z_][a-zA-Z0-9_]* > |
|
|
&{ null != getSyntaxId(2, intern(yytext)) } -- { $$ = getSyntaxId(2, intern(yytext)) } |
|
|
|
|
|
|
|
|
&{ null != getSyntaxId(2, intern(yytext)) } -- { $$= getSyntaxId(2, intern(yytext)) } |
|
|
|
|
|
|
|
|
meta_try = META_TRY t:meta_stmt i:meta_null c:meta_null f:meta_null |
|
|
meta_try = META_TRY t:meta_stmt i:meta_null c:meta_null f:meta_null |
|
|
( META_CATCH META_LPAREN i:META_IDENT META_RPAREN c:meta_stmt ) ? |
|
|
( META_CATCH META_LPAREN i:META_IDENT META_RPAREN c:meta_stmt ) ? |
|
|
( META_FINALLY f:meta_stmt ) ? { $$ = newTry(t, i, c, f) } |
|
|
|
|
|
|
|
|
( META_FINALLY f:meta_stmt ) ? { $$= newTry(t, i, c, f) } |
|
|
|
|
|
|
|
|
meta_null = { $$ = null } |
|
|
|
|
|
|
|
|
meta_null = { $$= null } |
|
|
|
|
|
|
|
|
meta_assignOp = META_ASSIGN { $$= null } |
|
|
meta_assignOp = META_ASSIGN { $$= null } |
|
|
| META_ASSIGNADD { $$= Add_symbol } |
|
|
| META_ASSIGNADD { $$= Add_symbol } |
|
@ -2250,56 +2249,56 @@ meta_switch = META_SWITCH META_LPAREN e:meta_exp META_RPAREN |
|
|
)* |
|
|
)* |
|
|
META_RCB { $$= newSwitch(e, labels, statements) } |
|
|
META_RCB { $$= newSwitch(e, labels, statements) } |
|
|
|
|
|
|
|
|
meta_cond = c:meta_logor META_QUERY t:meta_exp META_COLON f:meta_cond { $$ = newIf(c, t, f) } |
|
|
|
|
|
|
|
|
meta_cond = c:meta_logor META_QUERY t:meta_exp META_COLON f:meta_cond { $$= newIf(c, t, f) } |
|
|
| meta_logor |
|
|
| meta_logor |
|
|
|
|
|
|
|
|
meta_logor = l:meta_logand |
|
|
meta_logor = l:meta_logand |
|
|
( META_LOGOR r:meta_logand { l = newBinary(Logor_proto, l, r) } |
|
|
( META_LOGOR r:meta_logand { l = newBinary(Logor_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_logand = l:meta_bitor |
|
|
meta_logand = l:meta_bitor |
|
|
( META_LOGAND r:meta_bitor { l = newBinary(Logand_proto, l, r) } |
|
|
( META_LOGAND r:meta_bitor { l = newBinary(Logand_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_bitor = l:meta_bitxor |
|
|
meta_bitor = l:meta_bitxor |
|
|
( META_BITOR r:meta_bitxor { l = newBinary(Bitor_proto, l, r) } |
|
|
( META_BITOR r:meta_bitxor { l = newBinary(Bitor_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_bitxor = l:meta_bitand |
|
|
meta_bitxor = l:meta_bitand |
|
|
( META_BITXOR r:meta_bitand { l = newBinary(Bitxor_proto, l, r) } |
|
|
( META_BITXOR r:meta_bitand { l = newBinary(Bitxor_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_bitand = l:meta_eq |
|
|
meta_bitand = l:meta_eq |
|
|
( META_BITAND r:meta_eq { l = newBinary(Bitand_proto, l, r) } |
|
|
( META_BITAND r:meta_eq { l = newBinary(Bitand_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_eq = l:meta_ineq |
|
|
meta_eq = l:meta_ineq |
|
|
( META_EQUAL r:meta_ineq { l = newBinary(Equal_proto, l, r) } |
|
|
( META_EQUAL r:meta_ineq { l = newBinary(Equal_proto, l, r) } |
|
|
| META_NOTEQ r:meta_ineq { l = newBinary(Noteq_proto, l, r) } |
|
|
| META_NOTEQ r:meta_ineq { l = newBinary(Noteq_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_ineq = l:meta_shift |
|
|
meta_ineq = l:meta_shift |
|
|
( META_LESS r:meta_shift { l = newBinary(Less_proto, l, r) } |
|
|
( META_LESS r:meta_shift { l = newBinary(Less_proto, l, r) } |
|
|
| META_LESSEQ r:meta_shift { l = newBinary(Lesseq_proto, l, r) } |
|
|
| META_LESSEQ r:meta_shift { l = newBinary(Lesseq_proto, l, r) } |
|
|
| META_GREATEREQ r:meta_shift { l = newBinary(Greatereq_proto, l, r) } |
|
|
| META_GREATEREQ r:meta_shift { l = newBinary(Greatereq_proto, l, r) } |
|
|
| META_GREATER r:meta_shift { l = newBinary(Greater_proto, l, r) } |
|
|
| META_GREATER r:meta_shift { l = newBinary(Greater_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_shift = l:meta_sum |
|
|
meta_shift = l:meta_sum |
|
|
( META_SHLEFT r:meta_sum { l = newBinary(Shleft_proto, l, r) } |
|
|
( META_SHLEFT r:meta_sum { l = newBinary(Shleft_proto, l, r) } |
|
|
| META_SHRIGHT r:meta_sum { l = newBinary(Shright_proto, l, r) } |
|
|
| META_SHRIGHT r:meta_sum { l = newBinary(Shright_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_sum = l:meta_prod |
|
|
meta_sum = l:meta_prod |
|
|
( META_PLUS r:meta_prod { l = newBinary(Add_proto, l, r) } |
|
|
( META_PLUS r:meta_prod { l = newBinary(Add_proto, l, r) } |
|
|
| META_MINUS r:meta_prod { l = newBinary(Sub_proto, l, r) } |
|
|
| META_MINUS r:meta_prod { l = newBinary(Sub_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_prod = l:meta_prefix |
|
|
meta_prod = l:meta_prefix |
|
|
( META_MULTI r:meta_prefix { l = newBinary(Mul_proto, l, r) } |
|
|
( META_MULTI r:meta_prefix { l = newBinary(Mul_proto, l, r) } |
|
|
| META_DIVIDE r:meta_prefix { l = newBinary(Div_proto, l, r) } |
|
|
| META_DIVIDE r:meta_prefix { l = newBinary(Div_proto, l, r) } |
|
|
| META_MODULO r:meta_prefix { l = newBinary(Mod_proto, l, r) } |
|
|
| META_MODULO r:meta_prefix { l = newBinary(Mod_proto, l, r) } |
|
|
)* { $$ = l } |
|
|
|
|
|
|
|
|
)* { $$= l } |
|
|
|
|
|
|
|
|
meta_prefix = META_PLUS n:meta_prefix { $$= n } |
|
|
meta_prefix = META_PLUS n:meta_prefix { $$= n } |
|
|
| META_NEGATE n:meta_prefix { $$= newUnary(Neg_proto, n) } |
|
|
| META_NEGATE n:meta_prefix { $$= newUnary(Neg_proto, n) } |
|
@ -2308,8 +2307,8 @@ meta_prefix = META_PLUS n:meta_prefix { $$= n } |
|
|
| META_PLUSPLUS n:meta_prefix { $$= newPreIncrement(n) } |
|
|
| META_PLUSPLUS n:meta_prefix { $$= newPreIncrement(n) } |
|
|
| META_MINUSMINUS n:meta_prefix { $$= newPreDecrement(n) } |
|
|
| META_MINUSMINUS n:meta_prefix { $$= newPreDecrement(n) } |
|
|
| m:MO_OPERATION { $$= m } |
|
|
| m:MO_OPERATION { $$= m } |
|
|
# | META_BACKTICK n:meta_prefix { $$ = newUnary(Quasiquote_proto, n) } |
|
|
|
|
|
# | META_AT n:meta_prefix { $$ = newUnary(Unquote_proto, n) } |
|
|
|
|
|
|
|
|
# | META_BACKTICK n:meta_prefix { $$= newUnary(Quasiquote_proto, n) } |
|
|
|
|
|
# | META_AT n:meta_prefix { $$= newUnary(Unquote_proto, n) } |
|
|
| n:meta_postfix { $$= n } |
|
|
| n:meta_postfix { $$= n } |
|
|
|
|
|
|
|
|
meta_postfix = i:meta_value |
|
|
meta_postfix = i:meta_value |
|
@ -2319,7 +2318,7 @@ meta_postfix = i:meta_value |
|
|
| a:meta_argumentList { i = (null != getSyntax(1, i)) ? apply(globals, globals, getSyntax(1, i), a, i) : newCall(i, a) } |
|
|
| a:meta_argumentList { i = (null != getSyntax(1, i)) ? apply(globals, globals, getSyntax(1, i), a, i) : newCall(i, a) } |
|
|
| META_PLUSPLUS { i = newPostIncrement(i) } |
|
|
| META_PLUSPLUS { i = newPostIncrement(i) } |
|
|
| META_MINUSMINUS { i = newPostDecrement(i) } |
|
|
| META_MINUSMINUS { i = newPostDecrement(i) } |
|
|
) * { $$ = i } |
|
|
|
|
|
|
|
|
) * { $$= i } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
meta_paramList = META_LPAREN m:meta_makeMap |
|
|
meta_paramList = META_LPAREN m:meta_makeMap |
|
@ -2327,36 +2326,36 @@ meta_paramList = META_LPAREN m:meta_makeMap |
|
|
( META_COMMA i:META_IDENT { map_append(m, i) } |
|
|
( META_COMMA i:META_IDENT { map_append(m, i) } |
|
|
) * |
|
|
) * |
|
|
) ? |
|
|
) ? |
|
|
META_RPAREN { $$ = m } |
|
|
|
|
|
|
|
|
META_RPAREN { $$= m } |
|
|
|
|
|
|
|
|
meta_argumentList = META_LPAREN m:meta_makeMap |
|
|
meta_argumentList = META_LPAREN m:meta_makeMap |
|
|
( e:meta_exp { map_append(m, e) } |
|
|
( e:meta_exp { map_append(m, e) } |
|
|
( META_COMMA e:meta_exp { map_append(m, e) } |
|
|
( META_COMMA e:meta_exp { map_append(m, e) } |
|
|
) * |
|
|
) * |
|
|
) ? |
|
|
) ? |
|
|
META_RPAREN { $$ = m } |
|
|
|
|
|
|
|
|
META_RPAREN { $$= m } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
meta_value = n:META_FLOAT { $$ = newFloat(n) } |
|
|
|
|
|
| n:meta_integer { $$ = newInteger(n) } |
|
|
|
|
|
| s:meta_string { $$ = newString(s) } |
|
|
|
|
|
| s:meta_symbol { $$ = s } |
|
|
|
|
|
| m:meta_map { $$ = newMap(m) } |
|
|
|
|
|
| META_NULL { $$ = null } |
|
|
|
|
|
| i:META_IDENT { $$ = newGetVariable(i) } |
|
|
|
|
|
| p:meta_paramList e:meta_block { $$ = newFunc(null, p, e, null) } |
|
|
|
|
|
| META_LPAREN ( i:meta_block | i:meta_exp ) META_RPAREN { $$ = i } |
|
|
|
|
|
|
|
|
meta_value = n:META_FLOAT { $$= newFloat(n) } |
|
|
|
|
|
| n:meta_integer { $$= newInteger(n) } |
|
|
|
|
|
| s:meta_string { $$= newString(s) } |
|
|
|
|
|
| s:meta_symbol { $$= s } |
|
|
|
|
|
| m:meta_map { $$= newMap(m) } |
|
|
|
|
|
| META_NULL { $$= null } |
|
|
|
|
|
| i:META_IDENT { $$= newGetVariable(i) } |
|
|
|
|
|
| p:meta_paramList e:meta_block { $$= newFunc(null, p, e, null) } |
|
|
|
|
|
| META_LPAREN ( i:meta_block | i:meta_exp ) META_RPAREN { $$= i } |
|
|
|
|
|
|
|
|
meta_string = s:META_STRING -- { $$ = s } |
|
|
|
|
|
|
|
|
meta_string = s:META_STRING -- { $$= s } |
|
|
|
|
|
|
|
|
META_STRING = META_DQUOTE < (!META_DQUOTE meta_char)* > META_DQUOTE { $$ = makeString(unescape(yytext)) } |
|
|
|
|
|
|
|
|
META_STRING = META_DQUOTE < (!META_DQUOTE meta_char)* > META_DQUOTE { $$= makeString(unescape(yytext)) } |
|
|
|
|
|
|
|
|
meta_char = '\\' . | . |
|
|
meta_char = '\\' . | . |
|
|
|
|
|
|
|
|
meta_symbol = META_HASH |
|
|
meta_symbol = META_HASH |
|
|
( i:META_IDENT { $$ = newSymbol(i) } |
|
|
|
|
|
| i:meta_string { $$ = newSymbol(intern(get(i, String, value))) } |
|
|
|
|
|
|
|
|
( i:META_IDENT { $$= newSymbol(i) } |
|
|
|
|
|
| i:meta_string { $$= newSymbol(intern(get(i, String, value))) } |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
meta_map = META_LCB m:meta_makeMap |
|
|
meta_map = META_LCB m:meta_makeMap |
|
@ -2364,15 +2363,15 @@ meta_map = META_LCB m:meta_makeMap |
|
|
( META_COMMA k:meta_key META_COLON v:meta_exp { map_set(m, k, v) } |
|
|
( META_COMMA k:meta_key META_COLON v:meta_exp { map_set(m, k, v) } |
|
|
) * |
|
|
) * |
|
|
) ? |
|
|
) ? |
|
|
META_RCB { $$ = m } |
|
|
|
|
|
|
|
|
META_RCB { $$= m } |
|
|
| META_LBRAC m:meta_makeMap |
|
|
| META_LBRAC m:meta_makeMap |
|
|
( v:meta_exp { map_append(m, v) } |
|
|
( v:meta_exp { map_append(m, v) } |
|
|
( META_COMMA v:meta_exp { map_append(m, v) } |
|
|
( META_COMMA v:meta_exp { map_append(m, v) } |
|
|
) * |
|
|
) * |
|
|
) ? |
|
|
) ? |
|
|
META_RBRAC { $$ = m } |
|
|
|
|
|
|
|
|
META_RBRAC { $$= m } |
|
|
|
|
|
|
|
|
meta_makeMap = { $$ = makeMap() } |
|
|
|
|
|
|
|
|
meta_makeMap = { $$= makeMap() } |
|
|
|
|
|
|
|
|
meta_key = META_IDENT | meta_integer |
|
|
meta_key = META_IDENT | meta_integer |
|
|
|
|
|
|
|
@ -2380,33 +2379,31 @@ meta_keyword = META_SWITCH | META_CASE | META_DEFAULT | META_DO | META_FOR | ME |
|
|
| META_THROW | META_TRY | META_CATCH | META_FINALLY | META_NIL |
|
|
| META_THROW | META_TRY | META_CATCH | META_FINALLY | META_NIL |
|
|
# | META_SYNTAX |
|
|
# | META_SYNTAX |
|
|
|
|
|
|
|
|
META_IDENT = !meta_keyword < [a-zA-Z_][a-zA-Z0-9_]* > -- { $$ = intern(yytext) } |
|
|
|
|
|
|
|
|
META_IDENT = !meta_keyword < [a-zA-Z_][a-zA-Z0-9_]* > -- { $$= intern(yytext) } |
|
|
|
|
|
|
|
|
meta_integer = i:META_INTEGER { $$ = i } |
|
|
|
|
|
| '-' i:meta_integer { $$ = makeInteger(-getInteger(i)) } |
|
|
|
|
|
|
|
|
meta_integer = i:META_INTEGER { $$= i } |
|
|
|
|
|
| '-' i:meta_integer { $$= makeInteger(-getInteger(i)) } |
|
|
|
|
|
|
|
|
META_INTEGER = '0b' < [01]+ > { $$ = makeInteger(strtol(yytext, 0, 2)) } -- |
|
|
|
|
|
| '0x' < [0-9a-fA-F]+ > { $$ = makeInteger(strtol(yytext, 0, 16)) }-- |
|
|
|
|
|
| '0' < [0-7]+ > { $$ = makeInteger(strtol(yytext, 0, 8)) }-- |
|
|
|
|
|
| < [0-9]+ > { $$ = makeInteger(strtol(yytext, 0, 10)) }-- |
|
|
|
|
|
| META_SQUOTE < (!META_SQUOTE meta_char) > META_SQUOTE { $$ = makeInteger(unescape(yytext)[0]) }-- |
|
|
|
|
|
|
|
|
META_INTEGER = '0b' < [01]+ > { $$= makeInteger(strtol(yytext, 0, 2)) } -- |
|
|
|
|
|
| '0x' < [0-9a-fA-F]+ > { $$= makeInteger(strtol(yytext, 0, 16)) }-- |
|
|
|
|
|
| '0' < [0-7]+ > { $$= makeInteger(strtol(yytext, 0, 8)) }-- |
|
|
|
|
|
| < [0-9]+ > { $$= makeInteger(strtol(yytext, 0, 10)) }-- |
|
|
|
|
|
| META_SQUOTE < (!META_SQUOTE meta_char) > META_SQUOTE { $$= makeInteger(unescape(yytext)[0]) }-- |
|
|
|
|
|
|
|
|
META_FLOAT = < [-+]* [0-9]+ '.' [0-9]* ('e'[-+]*[0-9]+)? > { $$ = makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
| < [-+]* [0-9]* '.' [0-9]+ ('e'[-+]*[0-9]+)? > { $$ = makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
| < [-+]* [0-9]+ ('e'[-+]*[0-9]+) > { $$ = makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
|
|
|
META_FLOAT = < [-+]* [0-9]+ '.' [0-9]* ('e'[-+]*[0-9]+)? > { $$= makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
| < [-+]* [0-9]* '.' [0-9]+ ('e'[-+]*[0-9]+)? > { $$= makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
| < [-+]* [0-9]+ ('e'[-+]*[0-9]+) > { $$= makeFloat(strtold(yytext, 0)) } -- |
|
|
|
|
|
|
|
|
###### META operators ###### |
|
|
|
|
|
|
|
|
#--------------------------------------------- Meta operator ----------------------------------------------# |
|
|
|
|
|
|
|
|
MO_OPERATION = META_BACKTICK ( MO_INITIALIZER i:initializer { $$ = newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_CONSTANT c:constant { $$ = newUnary(Quote_proto ,c) } |
|
|
|
|
|
| MO_STATEMENT c:statement { $$ = newUnary(Quote_proto ,c) } |
|
|
|
|
|
| MO_INTEGER i:integerConstant { $$ = newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_DECLARATION i:declaration { $$ = newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_STRING i:stringLiteral { $$ = newUnary(Quote_proto ,i) } |
|
|
|
|
|
|
|
|
MO_OPERATION = META_BACKTICK ( MO_INITIALIZER i:initializer { $$= newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_CONSTANT c:constant { $$= newUnary(Quote_proto ,c) } |
|
|
|
|
|
| MO_STATEMENT c:statement { $$= newUnary(Quote_proto ,c) } |
|
|
|
|
|
| MO_INTEGER i:integerConstant { $$= newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_DECLARATION i:declaration { $$= newUnary(Quote_proto ,i) } |
|
|
|
|
|
| MO_STRING i:stringLiteral { $$= newUnary(Quote_proto ,i) } |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
# META_OPERATORS = MO_INITIALIZER | MO_CONSTANT | MO_STATEMENT | MO_INTEGER | MO_DECLARATION | MO_STRING |
|
|
|
|
|
|
|
|
|
|
|
MO_INITIALIZER = 'initializer' ![(a-zA-Z0-9_] -- |
|
|
MO_INITIALIZER = 'initializer' ![(a-zA-Z0-9_] -- |
|
|
MO_CONSTANT = 'constant' ![(a-zA-Z0-9_] -- |
|
|
MO_CONSTANT = 'constant' ![(a-zA-Z0-9_] -- |
|
|
MO_STATEMENT = 'statement' ![(a-zA-Z0-9_] -- |
|
|
MO_STATEMENT = 'statement' ![(a-zA-Z0-9_] -- |
|
@ -2415,7 +2412,7 @@ MO_DECLARATION = 'declaration' ![(a-zA-Z0-9_] -- |
|
|
MO_STRING = 'string' ![(a-zA-Z0-9_] -- |
|
|
MO_STRING = 'string' ![(a-zA-Z0-9_] -- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
############################ |
|
|
|
|
|
|
|
|
#--------------------------------------------- Meta rules ----------------------------------------------# |
|
|
|
|
|
|
|
|
META_NIL = 'nil' ![a-zA-Z0-9_] -- |
|
|
META_NIL = 'nil' ![a-zA-Z0-9_] -- |
|
|
#META_FUN = 'fun' ![a-zA-Z0-9_] -- |
|
|
#META_FUN = 'fun' ![a-zA-Z0-9_] -- |
|
@ -2490,37 +2487,37 @@ META_RPAREN = ')' -- |
|
|
META_DQUOTE = '"' |
|
|
META_DQUOTE = '"' |
|
|
META_SQUOTE = "'" |
|
|
META_SQUOTE = "'" |
|
|
|
|
|
|
|
|
#--------------------------------------------- Common rules ----------------------------------------------# |
|
|
|
|
|
|
|
|
#-------------------- C space rules --------------------# |
|
|
|
|
|
|
|
|
|
|
|
- = < Space* > { if (yyleng && $$) setComment($$, newComment(yytext)) } |
|
|
|
|
|
|
|
|
|
|
|
Space = Blank | Comment | EOL | Directive |
|
|
|
|
|
| "__extension__" &{gnu} { icol += 13 } |
|
|
|
|
|
|
|
|
- = < Space* > { if (yyleng && $$) setComment($$, newComment(yytext)) } |
|
|
|
|
|
|
|
|
Blank = ( [\003-\010] | '\013' | '\f' | [\016-\037] | [\177-\377] | ' ' ) { ++icol } |
|
|
|
|
|
| '\t' { icol= (icol + 8) & ~7 } |
|
|
|
|
|
|
|
|
#| C rules |
|
|
|
|
|
Space = Blank | Comment | EOL | Directive |
|
|
|
|
|
| "__extension__" &{gnu} { icol += 13 } |
|
|
|
|
|
|
|
|
EOL = ( "\r\n" | '\n' | '\r' ) { ++irow; icol= 0 } |
|
|
|
|
|
|
|
|
Blank = ( [\003-\010] | '\013' | '\f' | [\016-\037] | [\177-\377] | ' ' ) { ++icol } |
|
|
|
|
|
| '\t' { icol= (icol + 8) & ~7 } |
|
|
|
|
|
|
|
|
Comment = "/*" ( !"*/" (EOL | Any) )* "*/" |
|
|
|
|
|
| "//" ( ![\n\r] Any )* EOL |
|
|
|
|
|
|
|
|
EOL = ( "\r\n" | '\n' | '\r' ) { ++irow; icol= 0 } |
|
|
|
|
|
|
|
|
Directive = "#" (!EOL .)* |
|
|
|
|
|
|
|
|
Comment = "/*" ( !"*/" (EOL | Any) )* "*/" |
|
|
|
|
|
| "//" ( ![\n\r] Any )* EOL |
|
|
|
|
|
|
|
|
Any = . { ++icol } |
|
|
|
|
|
|
|
|
Directive = "#" (!EOL .)* |
|
|
|
|
|
|
|
|
#-------------------- Meta space rules --------------------# |
|
|
|
|
|
|
|
|
Any = . { ++icol } |
|
|
|
|
|
|
|
|
-- = (blank | comment)* |
|
|
|
|
|
|
|
|
#| Meta rules |
|
|
|
|
|
blank = space | eol |
|
|
|
|
|
space = [ \t] |
|
|
|
|
|
eol = ( "\n""\r"* |
|
|
|
|
|
| "\r""\n"* |
|
|
|
|
|
) { inputStack->lineNumber++ } |
|
|
|
|
|
|
|
|
blank = space | eol |
|
|
|
|
|
space = [ \t] |
|
|
|
|
|
eol = ( "\n""\r"* |
|
|
|
|
|
| "\r""\n"* |
|
|
|
|
|
) { inputStack->lineNumber++ } |
|
|
|
|
|
|
|
|
comment = "//" ( ![\n\r] . )* |
|
|
|
|
|
| "/*" ( !"*/" (eol | .) )* "*/" |
|
|
|
|
|
|
|
|
comment = "//" ( ![\n\r] . )* |
|
|
|
|
|
| "/*" ( !"*/" (eol | .) )* "*/" |
|
|
|
|
|
|
|
|
%% |
|
|
%% |
|
|
; |
|
|
; |
|
@ -4722,4 +4719,4 @@ int main(int argc, char **argv) |
|
|
|
|
|
|
|
|
// Local Variables: |
|
|
// Local Variables: |
|
|
// indent-tabs-mode: nil |
|
|
// indent-tabs-mode: nil |
|
|
// End: |
|
|
|
|
|
|
|
|
// End:- |