Add Rust target
This commit is contained in:
1 parent
5fc712c6ee
commit
89f1f84857
64 files changed
+3441
-27
No files matched your search
@@ -0,0 +1,148 @@
|
||||
tree;
|
||||
tree_prefix P;
|
||||
|
||||
<<header
|
||||
#[derive(Clone, Default)]
|
||||
pub struct TokenVal {
|
||||
pub i64_: u64,
|
||||
pub s: String,
|
||||
pub dou: f64,
|
||||
}
|
||||
>>
|
||||
|
||||
ptype TokenVal;
|
||||
|
||||
# Keywords.
|
||||
token byte;
|
||||
token def;
|
||||
token int;
|
||||
token long;
|
||||
token module;
|
||||
token return;
|
||||
token short;
|
||||
token size_t;
|
||||
token ssize_t;
|
||||
token ubyte;
|
||||
token uint;
|
||||
token ulong;
|
||||
token ushort;
|
||||
|
||||
# Symbols.
|
||||
token arrow /->/;
|
||||
token comma /,/;
|
||||
token lbrace /\{/;
|
||||
token lparen /\(/;
|
||||
token rbrace /\}/;
|
||||
token rparen /\)/;
|
||||
token semicolon /;/;
|
||||
|
||||
# Integer literals.
|
||||
token hex_int_l /0[xX][0-9a-fA-F][0-9a-fA-F_]*/ <<
|
||||
$$.i64_ = 64;
|
||||
>>
|
||||
|
||||
# Identifier.
|
||||
token ident /\$?[a-zA-Z_][a-zA-Z_0-9]*\??/ <<
|
||||
$$.s = std::str::from_utf8(match_).unwrap().to_string();
|
||||
$mode(default);
|
||||
return $token(ident);
|
||||
>>
|
||||
|
||||
# Comments.
|
||||
drop /#.*/;
|
||||
|
||||
# Whitespace.
|
||||
drop /[ \r\n]*/;
|
||||
|
||||
start Module;
|
||||
|
||||
# Assignment operators - right associative
|
||||
Expression -> Expression_Or:exp0;
|
||||
|
||||
# Logical OR operator - left associative
|
||||
Expression_Or -> Expression_And:exp0;
|
||||
|
||||
# Logical AND operator - left associative
|
||||
Expression_And -> Expression_Comp:exp0;
|
||||
|
||||
# Equality operators - left associative
|
||||
Expression_Comp -> Expression_Relational:exp0;
|
||||
|
||||
# Relational operators - left associative
|
||||
Expression_Relational -> Expression_REMatch:exp0;
|
||||
|
||||
# Regular expression - left associative
|
||||
Expression_REMatch -> Expression_BinOr:exp0;
|
||||
|
||||
# Binary OR operator - left associative
|
||||
Expression_BinOr -> Expression_Xor:exp0;
|
||||
|
||||
# Binary XOR operator - left associative
|
||||
Expression_Xor -> Expression_BinAnd:exp0;
|
||||
|
||||
# Binary AND operator - left associative
|
||||
Expression_BinAnd -> Expression_BitShift:exp0;
|
||||
|
||||
# Bit shift operators - left associative
|
||||
Expression_BitShift -> Expression_Plus:exp0;
|
||||
|
||||
# Add/subtract operators - left associative
|
||||
Expression_Plus -> Expression_Mul:exp0;
|
||||
|
||||
# Multiplication/divide/modulus operators - left associative
|
||||
Expression_Mul -> Expression_Range:exp0;
|
||||
|
||||
# Range construction operators - left associative
|
||||
Expression_Range -> Expression_UnaryPrefix:exp0;
|
||||
|
||||
# Unary prefix operators
|
||||
Expression_UnaryPrefix -> Expression_Dot:exp0;
|
||||
|
||||
# Postfix operators
|
||||
Expression_Dot -> Expression_Ident:exp0;
|
||||
Expression_Dot -> Expression_Dot:exp1 lparen rparen;
|
||||
|
||||
# Literals, identifiers, and parenthesized expressions
|
||||
Expression_Ident -> Literal;
|
||||
Expression_Ident -> ident;
|
||||
|
||||
FunctionDefinition -> def ident:name lparen FunctionParameterList?:parameters rparen FunctionReturnType?:returntype lbrace Statements rbrace;
|
||||
|
||||
FunctionParameterList -> ident:name Type:type FunctionParameterListMore?:more;
|
||||
FunctionParameterListMore -> comma ident:name Type:type FunctionParameterListMore?:more;
|
||||
|
||||
FunctionReturnType -> arrow Type;
|
||||
|
||||
Literal -> LiteralInteger;
|
||||
LiteralInteger -> hex_int_l;
|
||||
|
||||
Module -> ModuleStatement? ModuleItems;
|
||||
|
||||
ModuleItem -> FunctionDefinition;
|
||||
|
||||
ModuleItems -> ;
|
||||
ModuleItems -> ModuleItems ModuleItem;
|
||||
|
||||
ModulePath -> ident;
|
||||
|
||||
ModuleStatement -> module ModulePath semicolon;
|
||||
|
||||
ReturnStatement -> return Expression?:exp0 semicolon;
|
||||
|
||||
Statements -> ;
|
||||
Statements -> Statements Statement;
|
||||
Statement -> Expression semicolon;
|
||||
Statement -> ReturnStatement;
|
||||
|
||||
Type -> TypeBase;
|
||||
|
||||
TypeBase -> byte;
|
||||
TypeBase -> ubyte;
|
||||
TypeBase -> short;
|
||||
TypeBase -> ushort;
|
||||
TypeBase -> int;
|
||||
TypeBase -> uint;
|
||||
TypeBase -> long;
|
||||
TypeBase -> ulong;
|
||||
TypeBase -> size_t;
|
||||
TypeBase -> ssize_t;
|
||||
Reference in new issue
Block a user