/* -- Jist.grm ------------------------------------------------------ * * Production rules for the Jist programming language. * Edit in picas with tabs at 4, 8, 12, 16. * * Copyright 1997,1998,1999 Nikolas S. Boyd. All rights reserved. * *----------------------------------------------------------------- */ /* jist tokens */ => keywordSearch8B /* letter { letter | digit } */ /* class interface */ /* final */ /* public protected private packaged */ /* transient volatile */ /* native synchronized */ /* abstract */ /* static */ /* throws */ /* identifier: */ => operatorSearch8B /* @ % ^ & * + - \ / ? | ~ < > , */ /* := */ /* = */ /* ! */ /* ( */ /* ) */ /* . */ /* : */ /* , */ /* ; */ /* [ */ /* ] */ /* # */ /* ^ */ /* as */ /* is */ /* ----------------------- class file ----------------------- */ goal -> classFile classFile -> imports? classDefinition imports? -> -> imports imports -> importation -> imports importation importation -> import importName impend import -> => importKeyword8B importName -> => importName8B impend -> /* ----------------------- class definition ----------------------- */ classDefinition -> classSignature newClass members? endClass classSignature -> classDeclaration classExtensions? classDeclaration -> faceOptions? face faceName => defineClass8B face -> => saveFace8B faceName -> className => saveClass8B classExtensions? -> -> classExtensions classExtensions -> classExtension -> classExtensions cascade classExtension classExtension -> extension interfaceNames => extendClass8B interfaceNames -> interfaceName -> interfaceNames comma interfaceName extension -> keyword => extensionKeyword8B interfaceName -> className => extensionName8B members? -> -> members members -> qualifiedMember -> members qualifiedMember qualifiedMember -> accessOptions? member member -> variable -> method /* ----------------------- variables ----------------------- */ variable -> variableDeclaration period => declareVariable8B variableDeclaration -> variableName variableType initialization? variableType? -> -> variableType variableType -> is storageOptions? className => saveVariableType8B variableName -> localName => saveVariable8B initialization? -> -> assign messageExpression => initializeVariable8B /* ----------------------- methods and signatures ----------------------- */ method -> methodSignature period => saveMethod8B -> methodSignature methodBlock => saveMethod8B methodSignature -> methodPattern methodType? thrownClasses? methodType? -> -> methodType methodType -> return className => saveMethodType8B methodBlock -> newBlock blockContents? endBlock nestedBlock -> newScope nestedPattern? blockContents? endScope nestedPattern? -> -> nestedPattern nestedPattern -> anonymous scopeArguments? scopeResult? bang => saveScope8B scopeArguments? -> -> scopeArguments scopeArguments -> argument -> scopeArguments anonymous argument scopeResult? -> -> scopeResult scopeResult -> return className => scopeResult8B methodPattern -> unaryPattern => savePattern8B -> binaryPattern => savePattern8B -> keywordPattern => savePattern8B unaryPattern -> unarySelector binaryPattern -> binarySelectors argument keywordPattern -> keywordArgument naryArguments? naryArguments? -> -> keywordArguments -> anonymousArguments keywordArguments -> keywordArgument -> keywordArguments keywordArgument keywordArgument -> keyword argument anonymousArguments -> anonymousArgument -> anonymousArguments anonymousArgument anonymousArgument -> anonymous argument argument -> argumentName argumentType argumentType -> is argumentOption? className => saveArgumentType8B argumentName -> localName => saveArgument8B blockContents? -> -> sequence /* ----------------------- message expressions ----------------------- */ sequence -> statements => returnSelf8B -> statements result -> result statements -> statement -> statements statement statement -> expression period => saveStatement8B result -> expression => saveResult8B -> return expression => returnResult8B expression -> messageExpression cascades? -> assignments messageExpression cascades? => popAssigns8B assignments -> assignment -> assignments assignment assignment -> assignee assign => pushAssignment8B assignee -> localName variableType? => pushAssignee8B cascades? -> -> cascades cascades -> cascadingMessage -> cascades cascadingMessage cascadingMessage -> cascader cascadedMessage cascadedMessage -> unarySelector => sendUnaryCascade8B -> binaryMessage => sendBinaryCascade8B -> extendedMessage => sendKeywordCascade8B messageExpression -> unaryExpression -> binaryExpression -> keywordExpression => sendKeywords8B unaryExpression -> primary -> primary unaryMessages binaryExpression -> unaryExpression binaryMessages simpleExpression -> unaryExpression -> binaryExpression keywordExpression -> simpleExpression extendedMessage unaryMessages -> unarySelector => sendUnary8B -> unaryMessages unarySelector => sendUnary8B binaryMessages -> binaryMessage -> binaryMessages binaryMessage binaryMessage -> binaryOperator unaryExpression => sendBinary8B anonymousMessages -> anonymousMessage -> anonymousMessages anonymousMessage anonymousMessage -> anonymousElement simpleExpression keywordMessages -> keywordMessage -> keywordMessages keywordMessage keywordMessage -> keywordElement simpleExpression anonymousElement -> anonymous => pushKeyword8B keywordElement -> keyword => pushKeyword8B extendedMessage -> keywordMessage naryMessages? naryMessages? -> -> keywordMessages -> anonymousMessages /* ----------------------- primitive elements ----------------------- */ primary -> localName cast? => pushVariable8B -> literal => pushLiteral8B -> nestedBlock => pushBlock8B -> nestedTerm cast? => pushTerm8B cast? -> -> cast cast -> as className nestedTerm -> newTerm expression endTerm literal -> arrayConstant -> simpleConstant arrayConstant -> pound characterArray -> pound integerArray -> pound floatArray -> pound stringArray -> pound symbolArray characterArray -> characters => formCharacterArray8B characters -> character => collectCharacter8B -> characters character => collectCharacter8B character -> integerArray -> integers => formIntegerArray8B integers -> integer => collectInteger8B -> integers integer => collectInteger8B integer -> floatArray -> floats => formFloatArray8B floats -> float => collectFloat8B -> floats float => collectFloat8B float -> stringArray -> strings => formStringArray8B strings -> string => collectString8B -> strings string => collectString8B string -> symbolArray -> symbols => formSymbolArray8B symbols -> symbol => collectSymbol8B -> symbols symbol => collectSymbol8B symbol -> => pushSymbol8B -> unarySelector -> binarySelector -> keyword binaryOperator -> binarySelectors => pushBinary8B binarySelectors -> binarySelector -> binarySelectors binarySelector simpleConstant -> => saveCharacter8B -> => saveString8B -> => saveSymbol8B -> => saveInteger8B -> => saveFloat8B period -> equal -> as -> is -> comma -> bang -> pound -> return -> throws -> cascade -> cascader -> cascade => cascadeReceiver8B newTerm -> => newTerm8B endTerm -> => endTerm8B assign -> => findVariable8B newScope -> => newScope8B endScope -> => endScope8B newBlock -> => newBlock8B endBlock -> => endBlock8B newClass -> => newClass8B endClass -> => endClass8B anonymous -> => formKeyword8B keyword -> => formKeyword8B unarySelector -> localName => formSelector8B binarySelector -> => formOperator8B -> equal => formOperator8B -> comma => formOperator8B className -> localName -> -> faceOptions? -> -> faceOptions faceOptions -> faceOption -> faceOptions faceOption faceOption -> => saveOption8B -> => saveOption8B -> => saveOption8B accessOptions? -> -> accessOptions accessOptions -> accessOption -> accessOptions accessOption accessOption -> => saveOption8B -> => saveOption8B -> => saveOption8B storageOptions? -> -> storageOptions storageOptions -> storageOption -> storageOptions storageOption storageOption -> => saveOption8B -> => saveOption8B -> => saveOption8B argumentOption? -> -> argumentOption argumentOption -> => saveOption8B thrownClasses? -> -> throws thrownClasses thrownClasses -> thrownClass -> thrownClasses comma thrownClass thrownClass -> className => thrownClass8B /* ----------------------- end of grammar ----------------------- */