fastparse

WebJar for fastparse

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

fastparse
Last Version

Last Version

1.1.2
Release Date

Release Date

Type

Type

jar
Description

Description

fastparse
WebJar for fastparse
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/webpack/fastparse

Download fastparse

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/fastparse/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>fastparse</artifactId>
    <version>1.1.2</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/fastparse/
implementation 'org.webjars.npm:fastparse:1.1.2'
// https://jarcasting.com/artifacts/org.webjars.npm/fastparse/
implementation ("org.webjars.npm:fastparse:1.1.2")
'org.webjars.npm:fastparse:jar:1.1.2'
<dependency org="org.webjars.npm" name="fastparse" rev="1.1.2">
  <artifact name="fastparse" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='fastparse', version='1.1.2')
)
libraryDependencies += "org.webjars.npm" % "fastparse" % "1.1.2"
[org.webjars.npm/fastparse "1.1.2"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

fastparse

A very simple and stupid parser, based on a statemachine and regular expressions.

It's not intended for complex languages. It's intended to easily write a simple parser for a simple language.

Usage

Pass a description of statemachine to the constructor. The description must be in this form:

new Parser(description)

description is {
	// The key is the name of the state
	// The value is an object containing possible transitions
	"state-name": {
		// The key is a regular expression
		// If the regular expression matches the transition is executed
		// The value can be "true", a other state name or a function

		"a": true,
		// true will make the parser stay in the current state
		
		"b": "other-state-name",
		// a string will make the parser transit to a new state
		
		"[cde]": function(match, index, matchLength) {
			// "match" will be the matched string
			// "index" will be the position in the complete string
			// "matchLength" will be "match.length"
			
			// "this" will be the "context" passed to the "parse" method"
			
			// A new state name (string) can be returned
			return "other-state-name";
		},
		
		"([0-9]+)(\\.[0-9]+)?": function(match, first, second, index, matchLength) {
			// groups can be used in the regular expression
			// they will match to arguments "first", "second"
		},
		
		// the parser stops when it cannot match the string anymore
		
		// order of keys is the order in which regular expressions are matched
		// if the javascript runtime preserves the order of keys in an object
		// (this is not standardized, but it's a de-facto standard)
	}
}

The statemachine is compiled down to a single regular expression per state. So basically the parsing work is delegated to the (native) regular expression logic of the javascript runtime.

Parser.prototype.parse(initialState: String, parsedString: String, context: Object)

initialState: state where the parser starts to parse.

parsedString: the string which should be parsed.

context: an object which can be used to save state and results. Available as this in transition functions.

returns context

Example

var Parser = require("fastparse");

// A simple parser that extracts @licence ... from comments in a JS file
var parser = new Parser({
	// The "source" state
	"source": {
		// matches comment start
		"/\\*": "comment",
		"//": "linecomment",
		
		// this would be necessary for a complex language like JS
		// but omitted here for simplicity
		// "\"": "string1",
		// "\'": "string2",
		// "\/": "regexp"
		
	},
	// The "comment" state
	"comment": {
		"\\*/": "source",
		"@licen[cs]e\\s((?:[^*\n]|\\*+[^*/\n])*)": function(match, licenseText) {
			this.licences.push(licenseText.trim());
		}
	},
	// The "linecomment" state
	"linecomment": {
		"\n": "source",
		"@licen[cs]e\\s(.*)": function(match, licenseText) {
			this.licences.push(licenseText.trim());
		}
	}
});

var licences = parser.parse("source", sourceCode, { licences: [] }).licences;

console.log(licences);

License

MIT (http://www.opensource.org/licenses/mit-license.php)

org.webjars.npm

webpack

Versions

Version
1.1.2
1.1.1