| Index: petitparser/lib/src/smalltalk/grammar.dart
|
| diff --git a/petitparser/lib/src/smalltalk/grammar.dart b/petitparser/lib/src/smalltalk/grammar.dart
|
| deleted file mode 100644
|
| index 1f77c1e57c06f1a45e9a3a2a012aec2e632a8d45..0000000000000000000000000000000000000000
|
| --- a/petitparser/lib/src/smalltalk/grammar.dart
|
| +++ /dev/null
|
| @@ -1,229 +0,0 @@
|
| -part of smalltalk;
|
| -
|
| -/**
|
| - * Smalltalk grammar.
|
| - */
|
| -class SmalltalkGrammar extends GrammarParser {
|
| - SmalltalkGrammar() : super(new SmalltalkGrammarDefinition());
|
| -}
|
| -
|
| -/**
|
| - * Smalltalk grammar definition.
|
| - */
|
| -class SmalltalkGrammarDefinition extends GrammarDefinition {
|
| -
|
| - // the original implementation used a handwritten parser to
|
| - // build special token objects
|
| - token(input) {
|
| - if (input is String) {
|
| - input = input.length == 1 ? char(input) : string(input);
|
| - }
|
| - return input.token().trim(ref(spacer));
|
| - }
|
| -
|
| - // the original implementation uses a handwritten parser to
|
| - // efficiently consume whitespace and comments
|
| - spacer() => whitespace()
|
| - .or(ref(comment));
|
| - comment() => char('"')
|
| - .seq(char('"').neg().star())
|
| - .seq(char('"'));
|
| -
|
| - // the original implementation uses the hand written number
|
| - // parser of the system, this is the spec of the ANSI standard
|
| - number() => char('-').optional()
|
| - .seq(ref(positiveNumber));
|
| - positiveNumber() => ref(scaledDecimal)
|
| - .or(ref(float))
|
| - .or(ref(integer));
|
| -
|
| - integer() => ref(radixInteger)
|
| - .or(ref(decimalInteger));
|
| - decimalInteger() => ref(digits);
|
| - digits() => digit().plus();
|
| - radixInteger() => ref(radixSpecifier)
|
| - .seq(char('r'))
|
| - .seq(ref(radixDigits));
|
| - radixSpecifier() => ref(digits);
|
| - radixDigits() => pattern('0-9A-Z').plus();
|
| -
|
| - float() => ref(mantissa)
|
| - .seq(ref(exponentLetter)
|
| - .seq(ref(exponent))
|
| - .optional());
|
| - mantissa() => ref(digits)
|
| - .seq(char('.'))
|
| - .seq(ref(digits));
|
| - exponent() => char('-')
|
| - .seq(ref(decimalInteger));
|
| - exponentLetter() => pattern('edq');
|
| -
|
| - scaledDecimal() => ref(scaledMantissa)
|
| - .seq(char('s'))
|
| - .seq(ref(fractionalDigits).optional());
|
| - scaledMantissa() => ref(decimalInteger)
|
| - .or(ref(mantissa));
|
| - fractionalDigits() => ref(decimalInteger);
|
| -
|
| - // the original smalltalk grammar
|
| - array() => ref(token, '{')
|
| - .seq(ref(expression).separatedBy(ref(periodToken))
|
| - .seq(ref(periodToken).optional()).optional())
|
| - .seq(ref(token, '}'));
|
| - arrayItem() => ref(literal)
|
| - .or(ref(symbolLiteralArray))
|
| - .or(ref(arrayLiteralArray))
|
| - .or(ref(byteLiteralArray));
|
| - arrayLiteral() => ref(token, '#(')
|
| - .seq(ref(arrayItem).star())
|
| - .seq(ref(token, ')'));
|
| - arrayLiteralArray() => ref(token, '(')
|
| - .seq(ref(arrayItem).star())
|
| - .seq(ref(token, ')'));
|
| - assignment() => ref(variable)
|
| - .seq(ref(assignmentToken));
|
| - assignmentToken() => ref(token, ':=');
|
| - binary() => pattern('!%&*+,-/<=>?@\\|~').plus();
|
| - binaryExpression() => ref(unaryExpression)
|
| - .seq(ref(binaryMessage).star());
|
| - binaryMessage() => ref(binaryToken)
|
| - .seq(ref(unaryExpression));
|
| - binaryMethod() => ref(binaryToken)
|
| - .seq(ref(variable));
|
| - binaryPragma() => ref(binaryToken)
|
| - .seq(ref(arrayItem));
|
| - binaryToken() => ref(token, ref(binary));
|
| - block() => ref(token, '[')
|
| - .seq(ref(blockBody))
|
| - .seq(ref(token, ']'));
|
| - blockArgument() => ref(token, ':')
|
| - .seq(ref(variable));
|
| - blockArguments() => ref(blockArgumentsWith)
|
| - .or(ref(blockArgumentsWithout));
|
| - blockArgumentsWith() => ref(blockArgument).plus()
|
| - .seq(ref(token, '|').or(ref(token, ']').and()));
|
| - blockArgumentsWithout() => epsilon();
|
| - blockBody() => ref(blockArguments)
|
| - .seq(ref(sequence));
|
| - byteLiteral() => ref(token, '#[')
|
| - .seq(ref(numberLiteral).star())
|
| - .seq(ref(token, ']'));
|
| - byteLiteralArray() => ref(token, '[')
|
| - .seq(ref(numberLiteral).star())
|
| - .seq(ref(token, ']'));
|
| - cascadeExpression() => ref(keywordExpression)
|
| - .seq(ref(cascadeMessage).star());
|
| - cascadeMessage() => ref(token, ';')
|
| - .seq(ref(message));
|
| - character() => char('\$').seq(any());
|
| - characterLiteral() => ref(characterToken);
|
| - characterToken() => ref(token, ref(character));
|
| - expression() => ref(assignment).star()
|
| - .seq(ref(cascadeExpression));
|
| - falseLiteral() => ref(falseToken);
|
| - falseToken() => ref(token, 'false')
|
| - .seq(word().not());
|
| - identifier() => pattern('a-zA-Z_')
|
| - .seq(word().star());
|
| - identifierToken() => ref(token, ref(identifier));
|
| - keyword() => ref(identifier)
|
| - .seq(char(':'));
|
| - keywordExpression() => ref(binaryExpression)
|
| - .seq(ref(keywordMessage).optional());
|
| - keywordMessage() => ref(keywordToken)
|
| - .seq(ref(binaryExpression)).plus();
|
| - keywordMethod() => ref(keywordToken)
|
| - .seq(ref(variable)).plus();
|
| - keywordPragma() => ref(keywordToken)
|
| - .seq(ref(arrayItem)).plus();
|
| - keywordToken() => ref(token, ref(keyword));
|
| - literal() => ref(numberLiteral)
|
| - .or(ref(stringLiteral))
|
| - .or(ref(characterLiteral))
|
| - .or(ref(arrayLiteral))
|
| - .or(ref(byteLiteral))
|
| - .or(ref(symbolLiteral))
|
| - .or(ref(nilLiteral))
|
| - .or(ref(trueLiteral))
|
| - .or(ref(falseLiteral));
|
| - message() => ref(keywordMessage)
|
| - .or(ref(binaryMessage))
|
| - .or(ref(unaryMessage));
|
| - method() => ref(methodDeclaration)
|
| - .seq(ref(methodSequence));
|
| - methodDeclaration() => ref(keywordMethod)
|
| - .or(ref(unaryMethod))
|
| - .or(ref(binaryMethod));
|
| - methodSequence() => ref(periodToken).star()
|
| - .seq(ref(pragmas))
|
| - .seq(ref(periodToken).star())
|
| - .seq(ref(temporaries))
|
| - .seq(ref(periodToken).star())
|
| - .seq(ref(pragmas))
|
| - .seq(ref(periodToken).star())
|
| - .seq(ref(statements));
|
| - multiword() => ref(keyword).plus();
|
| - nilLiteral() => ref(nilToken);
|
| - nilToken() => ref(token, 'nil')
|
| - .seq(word().not());
|
| - numberLiteral() => ref(numberToken);
|
| - numberToken() => ref(token, ref(number));
|
| - parens() => ref(token, '(')
|
| - .seq(ref(expression))
|
| - .seq(ref(token, ')'));
|
| - period() => char('.');
|
| - periodToken() => ref(token, ref(period));
|
| - pragma() => ref(token, '<')
|
| - .seq(ref(pragmaMessage))
|
| - .seq(ref(token, '>'));
|
| - pragmaMessage() => ref(keywordPragma)
|
| - .or(ref(unaryPragma))
|
| - .or(ref(binaryPragma));
|
| - pragmas() => ref(pragma).star();
|
| - primary() => ref(literal)
|
| - .or(ref(variable))
|
| - .or(ref(block))
|
| - .or(ref(parens))
|
| - .or(ref(array));
|
| - answer() => ref(token, '^')
|
| - .seq(ref(expression));
|
| - sequence() => ref(temporaries)
|
| - .seq(ref(periodToken).star())
|
| - .seq(ref(statements));
|
| - start() => ref(startMethod);
|
| - startMethod() => ref(method).end();
|
| - statements() => ref(expression)
|
| - .seq(ref(periodToken).plus().seq(ref(statements))
|
| - .or(ref(periodToken).star()))
|
| - .or(ref(answer).seq(ref(periodToken).star()))
|
| - .or(ref(periodToken).star());
|
| - string_() => char('\'')
|
| - .seq(string('\'\'').or(pattern('^\'')).star())
|
| - .seq(char('\''));
|
| - stringLiteral() => ref(stringToken);
|
| - stringToken() => ref(token, ref(string_));
|
| - symbol() => ref(unary)
|
| - .or(ref(binary))
|
| - .or(ref(multiword))
|
| - .or(ref(string_));
|
| - symbolLiteral() => ref(token, '#').plus()
|
| - .seq(ref(token, ref(symbol)));
|
| - symbolLiteralArray() => ref(token, ref(symbol));
|
| - temporaries() => ref(token, '|')
|
| - .seq(ref(variable).star())
|
| - .seq(ref(token, '|'))
|
| - .optional();
|
| - trueLiteral() => ref(trueToken);
|
| - trueToken() => ref(token, 'true')
|
| - .seq(word().not());
|
| - unary() => ref(identifier)
|
| - .seq(char(':').not());
|
| - unaryExpression() => ref(primary)
|
| - .seq(ref(unaryMessage).star());
|
| - unaryMessage() => ref(unaryToken);
|
| - unaryMethod() => ref(identifierToken);
|
| - unaryPragma() => ref(identifierToken);
|
| - unaryToken() => ref(token, ref(unary));
|
| - variable() => ref(identifierToken);
|
| -
|
| -}
|
|
|