{"library":"parsimmon","title":"Parsimmon Parser Combinator Library","description":"Parsimmon is a compact, monadic LL(infinity) parser combinator library for JavaScript, enabling the construction of complex parsers from smaller, composable units. It is currently at version 1.18.1 and supports both modern Node.js environments and older browser versions (down to IE7). Its release cadence appears to be infrequent, with the last major feature release (1.7.0) being in 2018, though bug fixes and minor updates have occurred more recently. Key differentiators include its inspiration from Haskell's Parsec and Promises/A+ for its API design, its support for binary parsing using Node.js Buffers, and its compatibility with the Fantasy Land specification, implementing several algebraic structures like Semigroup, Apply, Applicative, Functor, Chain, and Monad. It distinguishes itself by offering a functional and declarative approach to parsing, making grammars easy to read and maintain.","language":"javascript","status":"active","last_verified":"Tue Apr 21","install":{"commands":["npm install parsimmon"],"cli":null},"imports":["import Parsimmon from 'parsimmon'","import Parsimmon from 'parsimmon';\nconst myParser = Parsimmon.string('hello');","import Parsimmon from 'parsimmon';\nconst myParser = Parsimmon.string('hello').map(s => s.toUpperCase());","import Parsimmon from 'parsimmon';\nconst language = Parsimmon.createLanguage({});"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import Parsimmon from 'parsimmon';\n\n// Define basic parsers\nconst digit = Parsimmon.regexp(/[0-9]/);\nconst plus = Parsimmon.string('+');\nconst minus = Parsimmon.string('-');\n\n// Combine parsers to recognize an integer (one or more digits)\nconst integer = digit.atLeast(1).map(digits => parseInt(digits.join(''), 10));\n\n// Combine parsers to recognize an operator\nconst operator = plus.or(minus);\n\n// Define a parser for a simple arithmetic expression like '123+45'\nconst expression = Parsimmon.seq(integer, operator, integer).map(\n  ([left, op, right]) => {\n    if (op === '+') return left + right;\n    if (op === '-') return left - right;\n    return NaN; // Should not happen with defined operators\n  }\n);\n\n// Parse some input strings\nconst result1 = expression.parse('123+45');\nconst result2 = expression.parse('99-10');\nconst result3 = expression.parse('5*2'); // Will fail\n\nconsole.log('Result for \"123+45\":', result1);\nconsole.log('Result for \"99-10\":', result2);\nconsole.log('Result for \"5*2\" (expected failure):', result3);\n\n// Example of parsing a more complex structure (e.g., a comma-separated list of numbers)\nconst comma = Parsimmon.string(',');\nconst listOfNumbers = integer.sepBy(comma).map(nums => nums.join(', '));\nconst listResult = listOfNumbers.parse('1,2,3,4,5');\nconsole.log('List of numbers for \"1,2,3,4,5\":', listResult);\n","lang":"javascript","description":"Demonstrates defining basic parsers for digits and operators, combining them to parse arithmetic expressions and comma-separated lists, and handling parse results.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}