petitparser_examples
PetitParser 프레임워크를 설명하는 예제 파서, 애플리케이션 및 벤치마크 모음.
Dart용 PetitParser 예제.
^2.7.0^1.19.0^0.15.0^1.4.0^1.16.0^4.6.0^7.0.0^1.1.0^6.6.0^2.4.0^4.1.0^6.0.0^1.26.0아래는 영문 원문 스냅샷입니다. 최신 내용은 GitHub에서 확인하세요.
Pub Package Build Status Code Coverage GitHub Issues GitHub Forks GitHub Stars GitHub License
A collection of real-world grammars, evaluators, interactive tools, and performance benchmarks illustrating PetitParser for Dart.
This package showcases how to model domain-specific notations, standard interchange formats, and full programming languages directly in plain Dart.
Add PetitParser and the examples package to your project dependencies:
dart pub add petitparser petitparser_examples
Parses BibTeX files into strongly typed entry objects with citation keys and key-value fields.
import 'package:petitparser_examples/bibtex.dart';
void main() {
final parser = BibTeXDefinition().build();
final result = parser.parse(r'''
@inproceedings{Reng10c,
title = "Practical Dynamic Grammars for Dynamic Languages",
author = "Lukas Renggli and Stéphane Ducasse and Tudor Gîrba and Oscar Nierstrasz",
year = 2010
}''');
final entry = result.value.single;
print(entry.key); // Reng10c
print(entry.type); // inproceedings
print(entry.fields); // {title: "Practical Dynamic Grammars for Dynamic Languages", ...}
}
Try the interactive BibTeX Browser & Search to download, search, filter, and export citations from real-world .bib files directly in the browser.
A comprehensive implementation of the Dart 3 grammar and parser producing strongly-typed Abstract Syntax Trees (ASTs). Supports records, patterns, switch expressions, class modifiers, enhanced enums, extension types, and null safety.
import 'package:petitparser_examples/dart.dart';
void main() {
final unit = parseDart('void main() => print("Hello, Dart!");');
print(unit.declarations.first); // FunctionDeclarationNode(main)
}
A complete implementation of the JSON specification. Transforms JSON text into native Dart maps, lists, strings, numbers, booleans, and null values.
import 'package:petitparser_examples/json.dart';
void main() {
final data = parseJson(
'{"name": "PetitParser", "tags": ["dart", "parser"], "active": true}',
);
print(data); // {name: PetitParser, tags: [dart, parser], active: true}
}
A Lisp grammar and tree-walking evaluator supporting symbols, numbers, strings, quoted forms, lexical closures, and native functions.
import 'package:petitparser_examples/lisp.dart';
void main() {
final environment = NativeEnvironment();
final result = evalString(lispParser, environment, '(+ 1 (* 2 3))');
print(result); // 7
}
Run the interactive console REPL:
dart run bin/lisp/lisp.dart
A mathematical expression evaluator built using ExpressionBuilder. Handles operator precedence, associativity, parentheses, variables, and standard mathematical functions.
import 'package:petitparser_examples/math.dart';
void main() {
final expression = parser.parse('sqrt(16) + 2 ^ 3').value;
print(expression.eval({})); // 12.0
}
A grammar for Pascal following the 1978 Apple Pascal Standard.
import 'package:petitparser_examples/pascal.dart';
void main() {
final parser = PascalParserDefinition().build();
final result = parser.parse('''
program HelloWorld;
begin
writeln('Hello, World!');
end.
''');
print(result is Success); // true
}
A Prolog grammar and inference engine supporting facts, rules, unification, and variable substitution.
import 'package:petitparser_examples/prolog.dart';
void main() {
final db = Database.parse('''
parent(bob, ann).
parent(bob, pat).
sibling(X, Y) :- parent(Z, X), parent(Z, Y).
''');
final query = Term.parse('sibling(ann, S)');
for (final solution in db.query(query)) {
print(solution); // sibling(ann, ann), sibling(ann, pat)
}
}
Run the interactive console REPL:
dart run bin/prolog/prolog.dart
A parser and compiler for regular expressions. Compiles parsed patterns into non-deterministic finite automata supporting concatenation, alternation, repetition, and character classes.
import 'package:petitparser_examples/regexp.dart';
void main() {
final nfa = Nfa.fromString(r'a*b+');
print(nfa.matchAsPrefix('aaab') != null); // true
print(nfa.matchAsPrefix('b') != null); // true
print(nfa.matchAsPrefix('a') != null); // false
}
A complete Smalltalk grammar exported from the original PetitParser implementation in Smalltalk, foundational to the Helvetia Language Workbench.
import 'package:petitparser_examples/smalltalk.dart';
void main() {
final parser = SmalltalkParserDefinition().build();
final result = parser.parse('''
example
1 to: 10 do: [ :i | Transcript show: i printString ]
''');
print(result is Success); // true
}
A configurable parser definition for delimited text formats with support for custom delimiters, quotation characters, and escaping rules.
import 'package:petitparser_examples/tabular.dart';
void main() {
final csv = TabularDefinition.csv().build();
final result = csv.parse(
'language,paradigm\nDart,multi-paradigm\nSmalltalk,object-oriented',
);
print(result.value);
// [[language, paradigm], [Dart, multi-paradigm], [Smalltalk, object-oriented]]
}
Decomposes RFC-3986 URI strings into structured components including scheme, authority, user info, host, port, path, query parameters, and fragments.
import 'package:petitparser_examples/uri.dart';
void main() {
final result = uri.parse(
'https://user:pass@example.com:8080/path/to/page?lang=en#heading',
);
print(result.value.scheme); // https
print(result.value.hostname); // example.com
print(result.value.port); // 8080
print(result.value.path); // /path/to/page
}
The web/xml directory demonstrates parsing XML documents into event streams, constructing DOM trees, pretty printing, and evaluating XPath expressions using the xml package.
Interactive browser playgrounds and visualization tools are located in the web/ directory.
To run the web applications locally:
dart pub global activate webdev
webdev serve --release
Open http://localhost:8080/ to browse the interactive playgrounds for BibTeX search & browsing, Dart grammar visualization, JSON, Lisp, Math evaluation, Math plotting, Prolog, Regular Expressions, Smalltalk, Tabular data, URI parsing, and XML.
Run performance benchmarks directly with the Dart CLI:
dart run --no-enable-asserts bin/benchmark/benchmark.dart
Each suite measures standard parsing throughput, fast non-capturing parse performance, and compares results against native implementations where available.
To run correctness verification without running the performance suite:
dart run bin/benchmark/benchmark.dart --no-benchmark