瀏覽代碼

re indenting the file

develop-theo
Sebeck10 2 年之前
父節點
當前提交
30af3df993
共有 1 個檔案被更改,包括 247 行新增250 行删除
  1. +247
    -249
      ccmeta.leg

+ 247
- 249
ccmeta.leg 查看文件

@ -35,17 +35,17 @@
#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_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)
typedef enum {
@ -1367,7 +1367,7 @@ integerConstant = < ( hexadecimalConstant
| binaryConstant &{gnu}
| decimalConstant
) integerSuffix?
> { $$ = new_C_int(yytext); } -
> { $$= new_C_int(yytext); } -
decimalConstant = [1-9][0-9]*
@ -1389,7 +1389,7 @@ imaginarySuffix = [ij]
# 6.4.4.2
floatingConstant = <( decimalFloatingConstant | hexadecimalFloatingConstant )> { $$ = new_C_float(yytext); } -
floatingConstant = <( decimalFloatingConstant | hexadecimalFloatingConstant )> { $$= new_C_float(yytext); } -
decimalFloatingConstant = fractionalConstant exponentPart? floatingSuffix?
@ -1416,8 +1416,8 @@ floatingSuffix = [fFlL] imaginarySuffix?
# 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 [^\'\\] )* #'
@ -1928,7 +1928,7 @@ jumpStatement = g:GOTO i:id t:SEMI { $$= new_C_goto(g,
## translationUnit = externalDeclaration+
externalDeclaration = <Space+> { $$ = newComment(yytext); }
externalDeclaration = <Space+> { $$= newComment(yytext); }
| ( SEMI &{gnu}
| declaration
| functionDefinition
@ -2038,197 +2038,196 @@ stringLiteralList = s:stringLiteral { listWith(s) }
( c:COMMA s:stringLiteral { listAppend2(c, s) }
)* { $$= 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 ----------------------------------------------#
# 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
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
#| i:meta_block usefull ?
| 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
( s:meta_stmt { 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_]* >
&{ 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_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_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_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 = l:meta_logand
( META_LOGOR r:meta_logand { l = newBinary(Logor_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_logand = l:meta_bitor
( META_LOGAND r:meta_bitor { l = newBinary(Logand_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_bitor = l:meta_bitxor
( META_BITOR r:meta_bitxor { l = newBinary(Bitor_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_bitxor = l:meta_bitand
( META_BITXOR r:meta_bitand { l = newBinary(Bitxor_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_bitand = l:meta_eq
( META_BITAND r:meta_eq { l = newBinary(Bitand_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_eq = l:meta_ineq
( META_EQUAL r:meta_ineq { l = newBinary(Equal_proto, l, r) }
| META_NOTEQ r:meta_ineq { l = newBinary(Noteq_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_ineq = l:meta_shift
( META_LESS r:meta_shift { l = newBinary(Less_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_GREATER r:meta_shift { l = newBinary(Greater_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_shift = l:meta_sum
( META_SHLEFT r:meta_sum { l = newBinary(Shleft_proto, l, r) }
| META_SHRIGHT r:meta_sum { l = newBinary(Shright_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_sum = l:meta_prod
( META_PLUS r:meta_prod { l = newBinary(Add_proto, l, r) }
| META_MINUS r:meta_prod { l = newBinary(Sub_proto, l, r) }
)* { $$ = l }
)* { $$= l }
meta_prod = l:meta_prefix
( META_MULTI r:meta_prefix { l = newBinary(Mul_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) }
)* { $$ = l }
)* { $$= l }
meta_prefix = META_PLUS n:meta_prefix { $$= 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_MINUSMINUS n:meta_prefix { $$= newPreDecrement(n) }
| 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 }
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) }
| META_PLUSPLUS { i = newPostIncrement(i) }
| META_MINUSMINUS { i = newPostDecrement(i) }
) * { $$ = i }
) * { $$= i }
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_RPAREN { $$ = m }
META_RPAREN { $$= m }
meta_argumentList = META_LPAREN m:meta_makeMap
( 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_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
@ -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_RCB { $$ = m }
META_RCB { $$= m }
| META_LBRAC m:meta_makeMap
( 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
@ -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_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_CONSTANT = 'constant' ![(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_] --
############################
#--------------------------------------------- Meta rules ----------------------------------------------#
META_NIL = 'nil' ![a-zA-Z0-9_] --
#META_FUN = 'fun' ![a-zA-Z0-9_] --
@ -2490,37 +2487,37 @@ META_RPAREN = ')' --
META_DQUOTE = '"'
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:
// indent-tabs-mode: nil
// End:
// End:-

Loading…
取消
儲存