475 lines
13 KiB
Rust
475 lines
13 KiB
Rust
use crate::tokenizer::Token;
|
|
|
|
pub enum Rule
|
|
{
|
|
Terminal(u8, Token),
|
|
NonTerminal(u8, u8, u8)
|
|
}
|
|
|
|
pub const NONTERMS: [&str; 115] =
|
|
[
|
|
"stat__15",
|
|
"funcbody__50",
|
|
"fieldlist",
|
|
"fieldlist__1",
|
|
"namelist",
|
|
"parlist",
|
|
">_non",
|
|
"chunk",
|
|
",_non",
|
|
"field__29",
|
|
"stat__11",
|
|
"stat__45",
|
|
"stat__33",
|
|
"funcname",
|
|
"prefixexp__25",
|
|
";_?",
|
|
"stat__5",
|
|
"stat__38",
|
|
"else_non",
|
|
"stat__16",
|
|
"<_non",
|
|
"explist",
|
|
"stat_*",
|
|
"{_non",
|
|
"funcnamedotexpansion_*",
|
|
"stat__6",
|
|
"funcnamedotexpansion",
|
|
"moreattribs_*",
|
|
"field__28",
|
|
"retstat_?",
|
|
"stat__9",
|
|
"stat__37",
|
|
"field",
|
|
"local_non",
|
|
")_non",
|
|
"morevars_*",
|
|
"moreattribs__19",
|
|
"morevars",
|
|
"forthirdarg_?",
|
|
"::_non",
|
|
"stat",
|
|
"morefields_*",
|
|
"]_non",
|
|
"[_non",
|
|
"assign",
|
|
"field__31",
|
|
"stat__4",
|
|
"do_non",
|
|
"unop",
|
|
"elseifblocks__18",
|
|
"elseblock_?",
|
|
"label__21",
|
|
"funcbody__51",
|
|
"in_non",
|
|
"stat__34",
|
|
"exp",
|
|
"funcnamecolonexpansion_?",
|
|
"(_non",
|
|
"if_non",
|
|
"stat__7",
|
|
"attrib__20",
|
|
"elseifblocks__17",
|
|
"fieldsep_?",
|
|
"while_non",
|
|
"elseifblocks_*",
|
|
"binop",
|
|
"..._non",
|
|
"then_non",
|
|
"return_non",
|
|
"._non",
|
|
"stat__35",
|
|
"prefixexp",
|
|
"attnamelist",
|
|
"functioncall__26",
|
|
"elseifblocks",
|
|
"function_non",
|
|
"}_non",
|
|
"var__22",
|
|
"tableconstructor__53",
|
|
"varlist",
|
|
"S_0",
|
|
"Name_non",
|
|
"goto_non",
|
|
"parlistvarargs_?",
|
|
"elseif_non",
|
|
"for_non",
|
|
"stat__8",
|
|
"args",
|
|
"stat__41",
|
|
"stat__14",
|
|
"until_non",
|
|
"morenames_*",
|
|
"stat__39",
|
|
"stat__32",
|
|
"end_non",
|
|
"attnamelist__46",
|
|
"moreexps_*",
|
|
"stat__10",
|
|
"=_non",
|
|
":_non",
|
|
"stat__36",
|
|
"functioncall__27",
|
|
"funcname__48",
|
|
"attrib",
|
|
"repeat_non",
|
|
"args__49",
|
|
"var",
|
|
"var__23",
|
|
"stat__40",
|
|
"exp__0",
|
|
"stat__42",
|
|
"morefields",
|
|
"moreattribs",
|
|
"funcbody",
|
|
"retstat__47",
|
|
];
|
|
|
|
pub const GRAMMAR: [Rule; 344] =
|
|
[
|
|
Rule::Terminal(57, Token::RoundOpen),
|
|
Rule::Terminal(34, Token::RoundClosed),
|
|
Rule::Terminal(8, Token::Comma),
|
|
Rule::Terminal(66, Token::DotDotDot),
|
|
Rule::Terminal(69, Token::Dot),
|
|
Rule::Terminal(39, Token::ColonColon),
|
|
Rule::Terminal(99, Token::Colon),
|
|
Rule::Terminal(15, Token::Semicolon),
|
|
Rule::Terminal(20, Token::Lt),
|
|
Rule::Terminal(98, Token::Equals),
|
|
Rule::Terminal(6, Token::Gt),
|
|
Rule::Terminal(81, Token::Name(String::new())),
|
|
Rule::NonTerminal(80, 22, 29),
|
|
Rule::NonTerminal(80, 68, 114),
|
|
Rule::Terminal(80, Token::Return),
|
|
Rule::NonTerminal(80, 40, 22),
|
|
Rule::Terminal(80, Token::Semicolon),
|
|
Rule::Terminal(80, Token::Break),
|
|
Rule::NonTerminal(80, 82, 81),
|
|
Rule::NonTerminal(80, 79, 44),
|
|
Rule::NonTerminal(80, 47, 25),
|
|
Rule::NonTerminal(80, 63, 46),
|
|
Rule::NonTerminal(80, 104, 59),
|
|
Rule::NonTerminal(80, 85, 30),
|
|
Rule::NonTerminal(80, 75, 89),
|
|
Rule::NonTerminal(80, 33, 0),
|
|
Rule::NonTerminal(80, 58, 93),
|
|
Rule::NonTerminal(80, 85, 31),
|
|
Rule::NonTerminal(80, 33, 11),
|
|
Rule::NonTerminal(80, 71, 87),
|
|
Rule::NonTerminal(80, 71, 73),
|
|
Rule::NonTerminal(80, 39, 51),
|
|
Rule::Terminal(43, Token::SquareOpen),
|
|
Rule::Terminal(42, Token::SquareClosed),
|
|
Rule::Terminal(87, Token::StringLiteral(String::new())),
|
|
Rule::NonTerminal(87, 57, 105),
|
|
Rule::NonTerminal(87, 23, 78),
|
|
Rule::NonTerminal(105, 21, 34),
|
|
Rule::Terminal(105, Token::RoundClosed),
|
|
Rule::NonTerminal(44, 98, 21),
|
|
Rule::NonTerminal(72, 81, 95),
|
|
Rule::Terminal(72, Token::Name(String::new())),
|
|
Rule::NonTerminal(95, 103, 27),
|
|
Rule::NonTerminal(95, 20, 60),
|
|
Rule::NonTerminal(95, 112, 27),
|
|
Rule::NonTerminal(95, 8, 36),
|
|
Rule::NonTerminal(103, 20, 60),
|
|
Rule::NonTerminal(60, 81, 6),
|
|
Rule::Terminal(65, Token::Plus),
|
|
Rule::Terminal(65, Token::Minus),
|
|
Rule::Terminal(65, Token::Star),
|
|
Rule::Terminal(65, Token::Slash),
|
|
Rule::Terminal(65, Token::SlashSlash),
|
|
Rule::Terminal(65, Token::Caret),
|
|
Rule::Terminal(65, Token::Percent),
|
|
Rule::Terminal(65, Token::Ampersand),
|
|
Rule::Terminal(65, Token::Pipe),
|
|
Rule::Terminal(65, Token::GtGt),
|
|
Rule::Terminal(65, Token::LtLt),
|
|
Rule::Terminal(65, Token::DotDot),
|
|
Rule::Terminal(65, Token::Lt),
|
|
Rule::Terminal(65, Token::LtEquals),
|
|
Rule::Terminal(65, Token::Gt),
|
|
Rule::Terminal(65, Token::GtEquals),
|
|
Rule::Terminal(65, Token::EqualsEquals),
|
|
Rule::Terminal(65, Token::TildeEquals),
|
|
Rule::Terminal(65, Token::And),
|
|
Rule::Terminal(65, Token::Or),
|
|
Rule::NonTerminal(7, 22, 29),
|
|
Rule::NonTerminal(7, 68, 114),
|
|
Rule::Terminal(7, Token::Return),
|
|
Rule::NonTerminal(7, 40, 22),
|
|
Rule::Terminal(7, Token::Semicolon),
|
|
Rule::Terminal(7, Token::Break),
|
|
Rule::NonTerminal(7, 82, 81),
|
|
Rule::NonTerminal(7, 79, 44),
|
|
Rule::NonTerminal(7, 47, 25),
|
|
Rule::NonTerminal(7, 63, 46),
|
|
Rule::NonTerminal(7, 104, 59),
|
|
Rule::NonTerminal(7, 85, 30),
|
|
Rule::NonTerminal(7, 75, 89),
|
|
Rule::NonTerminal(7, 33, 0),
|
|
Rule::NonTerminal(7, 58, 93),
|
|
Rule::NonTerminal(7, 85, 31),
|
|
Rule::NonTerminal(7, 33, 11),
|
|
Rule::NonTerminal(7, 71, 87),
|
|
Rule::NonTerminal(7, 71, 73),
|
|
Rule::NonTerminal(7, 39, 51),
|
|
Rule::Terminal(47, Token::Do),
|
|
Rule::Terminal(18, Token::Else),
|
|
Rule::NonTerminal(50, 18, 7),
|
|
Rule::Terminal(50, Token::Else),
|
|
Rule::Terminal(84, Token::Elseif),
|
|
Rule::NonTerminal(74, 84, 61),
|
|
Rule::NonTerminal(64, 74, 64),
|
|
Rule::NonTerminal(64, 84, 61),
|
|
Rule::NonTerminal(61, 55, 49),
|
|
Rule::NonTerminal(49, 67, 7),
|
|
Rule::Terminal(49, Token::Then),
|
|
Rule::Terminal(94, Token::End),
|
|
Rule::Terminal(55, Token::Nil),
|
|
Rule::Terminal(55, Token::False),
|
|
Rule::Terminal(55, Token::True),
|
|
Rule::Terminal(55, Token::Numeral(String::new())),
|
|
Rule::Terminal(55, Token::StringLiteral(String::new())),
|
|
Rule::Terminal(55, Token::DotDotDot),
|
|
Rule::NonTerminal(55, 48, 55),
|
|
Rule::NonTerminal(55, 55, 109),
|
|
Rule::NonTerminal(55, 75, 113),
|
|
Rule::NonTerminal(55, 23, 78),
|
|
Rule::NonTerminal(55, 57, 14),
|
|
Rule::Terminal(55, Token::Name(String::new())),
|
|
Rule::NonTerminal(55, 71, 77),
|
|
Rule::NonTerminal(55, 71, 26),
|
|
Rule::NonTerminal(55, 71, 87),
|
|
Rule::NonTerminal(55, 71, 73),
|
|
Rule::NonTerminal(109, 65, 55),
|
|
Rule::NonTerminal(21, 55, 96),
|
|
Rule::Terminal(21, Token::Nil),
|
|
Rule::Terminal(21, Token::False),
|
|
Rule::Terminal(21, Token::True),
|
|
Rule::Terminal(21, Token::Numeral(String::new())),
|
|
Rule::Terminal(21, Token::StringLiteral(String::new())),
|
|
Rule::Terminal(21, Token::DotDotDot),
|
|
Rule::NonTerminal(21, 48, 55),
|
|
Rule::NonTerminal(21, 55, 109),
|
|
Rule::NonTerminal(21, 75, 113),
|
|
Rule::NonTerminal(21, 23, 78),
|
|
Rule::NonTerminal(21, 57, 14),
|
|
Rule::Terminal(21, Token::Name(String::new())),
|
|
Rule::NonTerminal(21, 71, 77),
|
|
Rule::NonTerminal(21, 71, 26),
|
|
Rule::NonTerminal(21, 71, 87),
|
|
Rule::NonTerminal(21, 71, 73),
|
|
Rule::NonTerminal(32, 43, 28),
|
|
Rule::NonTerminal(32, 81, 45),
|
|
Rule::Terminal(32, Token::Nil),
|
|
Rule::Terminal(32, Token::False),
|
|
Rule::Terminal(32, Token::True),
|
|
Rule::Terminal(32, Token::Numeral(String::new())),
|
|
Rule::Terminal(32, Token::StringLiteral(String::new())),
|
|
Rule::Terminal(32, Token::DotDotDot),
|
|
Rule::NonTerminal(32, 48, 55),
|
|
Rule::NonTerminal(32, 55, 109),
|
|
Rule::NonTerminal(32, 75, 113),
|
|
Rule::NonTerminal(32, 23, 78),
|
|
Rule::NonTerminal(32, 57, 14),
|
|
Rule::Terminal(32, Token::Name(String::new())),
|
|
Rule::NonTerminal(32, 71, 77),
|
|
Rule::NonTerminal(32, 71, 26),
|
|
Rule::NonTerminal(32, 71, 87),
|
|
Rule::NonTerminal(32, 71, 73),
|
|
Rule::NonTerminal(28, 55, 9),
|
|
Rule::NonTerminal(9, 42, 45),
|
|
Rule::NonTerminal(45, 98, 55),
|
|
Rule::NonTerminal(2, 32, 3),
|
|
Rule::NonTerminal(2, 43, 28),
|
|
Rule::NonTerminal(2, 81, 45),
|
|
Rule::Terminal(2, Token::Nil),
|
|
Rule::Terminal(2, Token::False),
|
|
Rule::Terminal(2, Token::True),
|
|
Rule::Terminal(2, Token::Numeral(String::new())),
|
|
Rule::Terminal(2, Token::StringLiteral(String::new())),
|
|
Rule::Terminal(2, Token::DotDotDot),
|
|
Rule::NonTerminal(2, 48, 55),
|
|
Rule::NonTerminal(2, 55, 109),
|
|
Rule::NonTerminal(2, 75, 113),
|
|
Rule::NonTerminal(2, 23, 78),
|
|
Rule::NonTerminal(2, 57, 14),
|
|
Rule::Terminal(2, Token::Name(String::new())),
|
|
Rule::NonTerminal(2, 71, 77),
|
|
Rule::NonTerminal(2, 71, 26),
|
|
Rule::NonTerminal(2, 71, 87),
|
|
Rule::NonTerminal(2, 71, 73),
|
|
Rule::NonTerminal(3, 41, 62),
|
|
Rule::Terminal(3, Token::Comma),
|
|
Rule::Terminal(3, Token::Semicolon),
|
|
Rule::NonTerminal(3, 111, 41),
|
|
Rule::NonTerminal(3, 62, 32),
|
|
Rule::Terminal(62, Token::Comma),
|
|
Rule::Terminal(62, Token::Semicolon),
|
|
Rule::Terminal(85, Token::For),
|
|
Rule::NonTerminal(38, 8, 55),
|
|
Rule::NonTerminal(113, 57, 1),
|
|
Rule::NonTerminal(1, 5, 52),
|
|
Rule::NonTerminal(1, 34, 25),
|
|
Rule::NonTerminal(52, 34, 25),
|
|
Rule::NonTerminal(13, 81, 102),
|
|
Rule::Terminal(13, Token::Name(String::new())),
|
|
Rule::NonTerminal(102, 24, 56),
|
|
Rule::NonTerminal(102, 26, 24),
|
|
Rule::NonTerminal(102, 69, 81),
|
|
Rule::NonTerminal(102, 99, 81),
|
|
Rule::NonTerminal(56, 99, 81),
|
|
Rule::NonTerminal(26, 69, 81),
|
|
Rule::NonTerminal(24, 26, 24),
|
|
Rule::NonTerminal(24, 69, 81),
|
|
Rule::Terminal(75, Token::Function),
|
|
Rule::NonTerminal(73, 99, 101),
|
|
Rule::NonTerminal(101, 81, 87),
|
|
Rule::Terminal(82, Token::Goto),
|
|
Rule::Terminal(58, Token::If),
|
|
Rule::Terminal(53, Token::In),
|
|
Rule::NonTerminal(51, 81, 39),
|
|
Rule::Terminal(33, Token::Local),
|
|
Rule::NonTerminal(112, 8, 36),
|
|
Rule::NonTerminal(27, 112, 27),
|
|
Rule::NonTerminal(27, 8, 36),
|
|
Rule::NonTerminal(36, 81, 103),
|
|
Rule::Terminal(36, Token::Name(String::new())),
|
|
Rule::NonTerminal(96, 38, 96),
|
|
Rule::NonTerminal(96, 8, 55),
|
|
Rule::NonTerminal(111, 62, 32),
|
|
Rule::NonTerminal(41, 111, 41),
|
|
Rule::NonTerminal(41, 62, 32),
|
|
Rule::NonTerminal(91, 37, 91),
|
|
Rule::NonTerminal(91, 8, 81),
|
|
Rule::NonTerminal(37, 8, 81),
|
|
Rule::NonTerminal(35, 37, 35),
|
|
Rule::NonTerminal(35, 8, 81),
|
|
Rule::NonTerminal(4, 81, 91),
|
|
Rule::Terminal(4, Token::Name(String::new())),
|
|
Rule::Terminal(5, Token::DotDotDot),
|
|
Rule::NonTerminal(5, 4, 83),
|
|
Rule::NonTerminal(5, 81, 91),
|
|
Rule::Terminal(5, Token::Name(String::new())),
|
|
Rule::NonTerminal(83, 8, 66),
|
|
Rule::NonTerminal(71, 57, 14),
|
|
Rule::Terminal(71, Token::Name(String::new())),
|
|
Rule::NonTerminal(71, 71, 77),
|
|
Rule::NonTerminal(71, 71, 26),
|
|
Rule::NonTerminal(71, 71, 87),
|
|
Rule::NonTerminal(71, 71, 73),
|
|
Rule::NonTerminal(14, 55, 34),
|
|
Rule::Terminal(104, Token::Repeat),
|
|
Rule::NonTerminal(29, 68, 114),
|
|
Rule::Terminal(29, Token::Return),
|
|
Rule::NonTerminal(114, 21, 15),
|
|
Rule::Terminal(114, Token::Semicolon),
|
|
Rule::NonTerminal(114, 55, 96),
|
|
Rule::Terminal(114, Token::Nil),
|
|
Rule::Terminal(114, Token::False),
|
|
Rule::Terminal(114, Token::True),
|
|
Rule::Terminal(114, Token::Numeral(String::new())),
|
|
Rule::Terminal(114, Token::StringLiteral(String::new())),
|
|
Rule::Terminal(114, Token::DotDotDot),
|
|
Rule::NonTerminal(114, 48, 55),
|
|
Rule::NonTerminal(114, 55, 109),
|
|
Rule::NonTerminal(114, 75, 113),
|
|
Rule::NonTerminal(114, 23, 78),
|
|
Rule::NonTerminal(114, 57, 14),
|
|
Rule::Terminal(114, Token::Name(String::new())),
|
|
Rule::NonTerminal(114, 71, 77),
|
|
Rule::NonTerminal(114, 71, 26),
|
|
Rule::NonTerminal(114, 71, 87),
|
|
Rule::NonTerminal(114, 71, 73),
|
|
Rule::Terminal(68, Token::Return),
|
|
Rule::Terminal(40, Token::Semicolon),
|
|
Rule::Terminal(40, Token::Break),
|
|
Rule::NonTerminal(40, 82, 81),
|
|
Rule::NonTerminal(40, 79, 44),
|
|
Rule::NonTerminal(40, 47, 25),
|
|
Rule::NonTerminal(40, 63, 46),
|
|
Rule::NonTerminal(40, 104, 59),
|
|
Rule::NonTerminal(40, 85, 30),
|
|
Rule::NonTerminal(40, 75, 89),
|
|
Rule::NonTerminal(40, 33, 0),
|
|
Rule::NonTerminal(40, 58, 93),
|
|
Rule::NonTerminal(40, 85, 31),
|
|
Rule::NonTerminal(40, 33, 11),
|
|
Rule::NonTerminal(40, 71, 87),
|
|
Rule::NonTerminal(40, 71, 73),
|
|
Rule::NonTerminal(40, 39, 51),
|
|
Rule::NonTerminal(22, 40, 22),
|
|
Rule::Terminal(22, Token::Semicolon),
|
|
Rule::Terminal(22, Token::Break),
|
|
Rule::NonTerminal(22, 82, 81),
|
|
Rule::NonTerminal(22, 79, 44),
|
|
Rule::NonTerminal(22, 47, 25),
|
|
Rule::NonTerminal(22, 63, 46),
|
|
Rule::NonTerminal(22, 104, 59),
|
|
Rule::NonTerminal(22, 85, 30),
|
|
Rule::NonTerminal(22, 75, 89),
|
|
Rule::NonTerminal(22, 33, 0),
|
|
Rule::NonTerminal(22, 58, 93),
|
|
Rule::NonTerminal(22, 85, 31),
|
|
Rule::NonTerminal(22, 33, 11),
|
|
Rule::NonTerminal(22, 71, 87),
|
|
Rule::NonTerminal(22, 71, 73),
|
|
Rule::NonTerminal(22, 39, 51),
|
|
Rule::NonTerminal(97, 53, 10),
|
|
Rule::NonTerminal(10, 21, 16),
|
|
Rule::NonTerminal(89, 13, 113),
|
|
Rule::NonTerminal(0, 75, 19),
|
|
Rule::NonTerminal(19, 81, 113),
|
|
Rule::NonTerminal(93, 55, 12),
|
|
Rule::NonTerminal(12, 67, 54),
|
|
Rule::NonTerminal(54, 7, 70),
|
|
Rule::NonTerminal(54, 64, 100),
|
|
Rule::NonTerminal(54, 50, 94),
|
|
Rule::Terminal(54, Token::End),
|
|
Rule::NonTerminal(70, 64, 100),
|
|
Rule::NonTerminal(70, 50, 94),
|
|
Rule::Terminal(70, Token::End),
|
|
Rule::NonTerminal(100, 50, 94),
|
|
Rule::Terminal(100, Token::End),
|
|
Rule::NonTerminal(31, 81, 17),
|
|
Rule::NonTerminal(17, 98, 92),
|
|
Rule::NonTerminal(92, 55, 108),
|
|
Rule::NonTerminal(46, 55, 16),
|
|
Rule::NonTerminal(108, 8, 88),
|
|
Rule::NonTerminal(88, 55, 110),
|
|
Rule::NonTerminal(110, 38, 16),
|
|
Rule::NonTerminal(110, 47, 25),
|
|
Rule::NonTerminal(11, 72, 44),
|
|
Rule::NonTerminal(11, 81, 95),
|
|
Rule::Terminal(11, Token::Name(String::new())),
|
|
Rule::NonTerminal(16, 47, 25),
|
|
Rule::NonTerminal(25, 7, 94),
|
|
Rule::Terminal(25, Token::End),
|
|
Rule::NonTerminal(59, 7, 86),
|
|
Rule::NonTerminal(59, 90, 55),
|
|
Rule::NonTerminal(86, 90, 55),
|
|
Rule::NonTerminal(30, 4, 97),
|
|
Rule::NonTerminal(78, 2, 76),
|
|
Rule::Terminal(78, Token::CurlyClosed),
|
|
Rule::Terminal(67, Token::Then),
|
|
Rule::Terminal(48, Token::Minus),
|
|
Rule::Terminal(48, Token::Not),
|
|
Rule::Terminal(48, Token::Hash),
|
|
Rule::Terminal(48, Token::Tilde),
|
|
Rule::Terminal(90, Token::Until),
|
|
Rule::Terminal(106, Token::Name(String::new())),
|
|
Rule::NonTerminal(106, 71, 77),
|
|
Rule::NonTerminal(106, 71, 26),
|
|
Rule::NonTerminal(77, 43, 107),
|
|
Rule::NonTerminal(107, 55, 42),
|
|
Rule::NonTerminal(79, 106, 35),
|
|
Rule::Terminal(79, Token::Name(String::new())),
|
|
Rule::NonTerminal(79, 71, 77),
|
|
Rule::NonTerminal(79, 71, 26),
|
|
Rule::Terminal(63, Token::While),
|
|
Rule::Terminal(23, Token::CurlyOpen),
|
|
Rule::Terminal(76, Token::CurlyClosed),
|
|
];
|