From ba11288a2086aa48c1486072e2c3341d257935a2 Mon Sep 17 00:00:00 2001 From: Abiria Date: Fri, 3 May 2024 01:29:32 +0900 Subject: [PATCH] feat: add support for LALRPOP (#1077) --- languages.json | 7 +++++++ tests/data/lalrpop.lalrpop | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 tests/data/lalrpop.lalrpop diff --git a/languages.json b/languages.json index e04b57ed0..8c0957222 100644 --- a/languages.json +++ b/languages.json @@ -830,6 +830,13 @@ "env": ["ksh"], "extensions": ["ksh"] }, + "Lalrpop": { + "name": "LALRPOP", + "line_comment": ["//"], + "extensions": ["lalrpop"], + "quotes": [["\\\"", "\\\""], ["#\\\"", "\\\"#"]], + "verbatim_quotes": [["r##\\\"", "\\\"##"], ["r#\\\"", "\\\"#"]] + }, "KvLanguage": { "name":"KV Language", "line_comment": ["# "], diff --git a/tests/data/lalrpop.lalrpop b/tests/data/lalrpop.lalrpop new file mode 100644 index 000000000..ffd7622e2 --- /dev/null +++ b/tests/data/lalrpop.lalrpop @@ -0,0 +1,37 @@ +// 37 lines 26 code 3 comments 8 blanks +use crate::ast::{ExprSymbol, Opcode}; +use crate::tok9::Tok; + +grammar<'input>(input: &'input str); + +// line comment +pub Expr: Box> = { // comment 1 + Expr r##"verbatim2"## Factor => Box::new(ExprSymbol::Op(<>)), + Factor, // comment 2 +}; + +Factor: Box> = { // comment 3 + Factor "FactorOp" Term => Box::new(ExprSymbol::Op(<>)), + Term, +}; + +// comment 4 + +Term: Box> = { + r#"verbatim"# => Box::new(ExprSymbol::NumSymbol(<>)), + "(" ")" +}; + +extern { + type Location = usize; + type Error = (); + + enum Tok<'input> { + r#"verbatim"# => Tok::NumSymbol(<&'input str>), + "FactorOp" => Tok::FactorOp(), + r##"verbatim2"## => Tok::ExprOp(), + "(" => Tok::ParenOpen, + ")" => Tok::ParenClose, + } +} +