Skip to content

Commit

Permalink
get rid of nearley hack
Browse files Browse the repository at this point in the history
  • Loading branch information
shmish111 committed Jul 31, 2020
1 parent dfee5af commit cdc62cc
Show file tree
Hide file tree
Showing 8 changed files with 82 additions and 996 deletions.
114 changes: 59 additions & 55 deletions marlowe-playground-client/grammar.ne

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion marlowe-playground-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"file-loader": "^2.0.0",
"html-webpack-plugin": "^3.2.0",
"monaco-editor-webpack-plugin": "^1.9.0",
"nearley-webpack-loader": "https://github.com/shmish111/nearley-webpack-loader/archive/master.tar.gz",
"nearley-webpack-loader": "^0.0.2",
"node-sass": "^4.12.0",
"purs-loader": "^3.6.0",
"sass-loader": "^7.1.0",
Expand Down
4 changes: 2 additions & 2 deletions marlowe-playground-client/src/HaskellEditor.purs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import Data.String as String
import Effect.Aff.Class (class MonadAff)
import Examples.Haskell.Contracts as HE
import Halogen (ClassName(..), ComponentHTML, liftEffect)
import Halogen.Classes (aHorizontal, accentBorderBottom, activeClasses, analysisPanel, closeDrawerArrowIcon, codeEditor, footerPanelBg, jFlexStart, minimizeIcon, panelSubHeader, panelSubHeaderMain, spaceLeft)
import Halogen.HTML (HTML, a, button, code_, div, div_, img, li, option, pre, pre_, section, select, slot, small_, text, ul)
import Halogen.Classes (aHorizontal, activeClasses, analysisPanel, closeDrawerArrowIcon, codeEditor, footerPanelBg, jFlexStart, minimizeIcon, panelSubHeader, panelSubHeaderMain, spaceLeft)
import Halogen.HTML (HTML, a, button, code_, div, div_, img, li, option, pre_, section, select, slot, small_, text, ul)
import Halogen.HTML.Events (onClick, onSelectedIndexChange)
import Halogen.HTML.Properties (alt, class_, classes, disabled, src)
import Halogen.HTML.Properties as HTML
Expand Down
6 changes: 5 additions & 1 deletion marlowe-playground-client/src/Marlowe/Holes.purs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Prelude
import Data.Array (foldMap)
import Data.Array as Array
import Data.BigInteger (BigInteger)
import Data.BigInteger as BigInteger
import Data.Enum (class BoundedEnum, class Enum, upFromIncluding)
import Data.Foldable (intercalate)
import Data.Function (on)
Expand All @@ -24,7 +25,7 @@ import Data.String.CodeUnits (dropRight)
import Data.Symbol (SProxy(..))
import Data.Traversable (traverse)
import Data.Tuple (Tuple(..))
import Marlowe.Semantics (PubKey, Rational(..), Slot, TokenName)
import Marlowe.Semantics (PubKey, Rational(..), Slot(..), TokenName)
import Marlowe.Semantics as S
import Monaco (CompletionItem, IRange, completionItemKind)
import Text.Extra as Text
Expand Down Expand Up @@ -374,6 +375,9 @@ instance termWrapperHasContractData :: HasContractData a => HasContractData (Ter
mkDefaultTermWrapper :: forall a. a -> TermWrapper a
mkDefaultTermWrapper a = TermWrapper a zero

mkTimeout :: Int -> Range -> TermWrapper Slot
mkTimeout v pos = TermWrapper (Slot (BigInteger.fromInt v)) pos

-- special case
instance fromTermRational :: FromTerm Rational Rational where
fromTerm = pure
Expand Down
5 changes: 3 additions & 2 deletions marlowe-playground-client/src/Marlowe/Parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@

const nearley = require("nearley");
const grammar = require("grammar");
exports.parse_ = function (emptyInputError, parserError, success, fs, input) {

exports.parse_ = function (emptyInputError, parserError, success, input) {
if (!input) {
return emptyInputError;
}
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar(fs)));
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));
try {
parser.feed(input);
return success(parser.results[0]);
Expand Down
115 changes: 4 additions & 111 deletions marlowe-playground-client/src/Marlowe/Parser.purs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import Data.Bifunctor (lmap)
import Data.BigInteger (BigInteger)
import Data.BigInteger as BigInteger
import Data.Either (Either(..))
import Data.Function.Uncurried (Fn5, runFn5)
import Data.Function.Uncurried (Fn4, runFn4)
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Data.List (List)
import Data.Maybe (Maybe(..))
import Data.String (length)
import Data.String.CodeUnits (fromCharArray)
import Data.Unit (Unit, unit)
import Marlowe.Holes (class FromTerm, AccountId(..), Action(..), Bound(..), Case(..), ChoiceId(..), Contract(..), Observation(..), Party(..), Payee(..), Range, Term(..), TermWrapper(..), Token(..), Value(..), ValueId(..), fromTerm, getRange, mkHole)
import Marlowe.Holes (class FromTerm, AccountId(..), Action(..), Bound(..), Case(..), ChoiceId(..), Contract(..), Observation(..), Party(..), Payee(..), Term(..), TermWrapper(..), Token(..), Value(..), ValueId(..), fromTerm)
import Marlowe.Semantics (CurrencySymbol, Rational(..), PubKey, Slot(..), SlotInterval(..), TransactionInput(..), TransactionWarning(..), TokenName)
import Marlowe.Semantics as S
import Prelude (class Show, bind, const, discard, pure, show, void, zero, ($), (*>), (-), (<$), (<$>), (<*), (<*>), (<<<))
Expand All @@ -26,111 +26,6 @@ import Text.Parsing.StringParser.CodeUnits (alphaNum, char, skipSpaces, string)
import Text.Parsing.StringParser.Combinators (between, choice, sepBy)
import Type.Proxy (Proxy(..))

type HelperFunctions a
= { mkHole :: String -> Range -> Term a
, mkTerm :: a -> Range -> Term a
, mkTermWrapper :: a -> Range -> TermWrapper a
, getRange :: Term a -> Range
, mkBigInteger :: Int -> BigInteger
, mkTimeout :: Int -> Range -> TermWrapper Slot
, mkClose :: Contract
, mkPay :: AccountId -> Term Payee -> Term Token -> Term Value -> Term Contract -> Contract
, mkWhen :: Array (Term Case) -> (TermWrapper Slot) -> Term Contract -> Contract
, mkIf :: Term Observation -> Term Contract -> Term Contract -> Contract
, mkLet :: TermWrapper ValueId -> Term Value -> Term Contract -> Contract
, mkAssert :: Term Observation -> Term Contract -> Contract
, mkCase :: Term Action -> Term Contract -> Case
, mkBound :: BigInteger -> BigInteger -> Bound
, mkDeposit :: AccountId -> Term Party -> Term Token -> Term Value -> Action
, mkChoice :: ChoiceId -> Array (Term Bound) -> Action
, mkNotify :: Term Observation -> Action
, mkChoiceId :: String -> Term Party -> ChoiceId
, mkValueId :: String -> ValueId
, mkAccountId :: BigInteger -> Term Party -> AccountId
, mkToken :: String -> String -> Token
, mkPK :: String -> Party
, mkRole :: String -> Party
, mkAccount :: AccountId -> Payee
, mkParty :: Term Party -> Payee
, mkAndObs :: Term Observation -> Term Observation -> Observation
, mkOrObs :: Term Observation -> Term Observation -> Observation
, mkNotObs :: Term Observation -> Observation
, mkChoseSomething :: ChoiceId -> Observation
, mkValueGE :: Term Value -> Term Value -> Observation
, mkValueGT :: Term Value -> Term Value -> Observation
, mkValueLT :: Term Value -> Term Value -> Observation
, mkValueLE :: Term Value -> Term Value -> Observation
, mkValueEQ :: Term Value -> Term Value -> Observation
, mkTrueObs :: Observation
, mkFalseObs :: Observation
, mkAvailableMoney :: AccountId -> Term Token -> Value
, mkConstant :: BigInteger -> Value
, mkNegValue :: Term Value -> Value
, mkAddValue :: Term Value -> Term Value -> Value
, mkSubValue :: Term Value -> Term Value -> Value
, mkMulValue :: Term Value -> Term Value -> Value
, mkRational :: BigInteger -> BigInteger -> Rational
, mkScale :: TermWrapper Rational -> Term Value -> Value
, mkChoiceValue :: ChoiceId -> Value
, mkSlotIntervalStart :: Value
, mkSlotIntervalEnd :: Value
, mkUseValue :: TermWrapper ValueId -> Value
, mkCond :: Term Observation -> Term Value -> Term Value -> Value
}

helperFunctions :: forall a. HelperFunctions a
helperFunctions =
{ mkHole: mkHole
, mkTerm: Term
, mkTermWrapper: TermWrapper
, getRange: getRange
, mkBigInteger: BigInteger.fromInt
, mkTimeout: \v pos -> TermWrapper (Slot (BigInteger.fromInt v)) pos
, mkClose: Close
, mkPay: Pay
, mkWhen: When
, mkIf: If
, mkAssert: Assert
, mkLet: Let
, mkCase: Case
, mkBound: Bound
, mkDeposit: Deposit
, mkChoice: Choice
, mkNotify: Notify
, mkChoiceId: ChoiceId
, mkValueId: ValueId
, mkAccountId: AccountId
, mkToken: Token
, mkPK: PK
, mkRole: Role
, mkAccount: Account
, mkParty: Party
, mkAndObs: AndObs
, mkOrObs: OrObs
, mkNotObs: NotObs
, mkChoseSomething: ChoseSomething
, mkValueGE: ValueGE
, mkValueGT: ValueGT
, mkValueLT: ValueLT
, mkValueLE: ValueLE
, mkValueEQ: ValueEQ
, mkTrueObs: TrueObs
, mkFalseObs: FalseObs
, mkAvailableMoney: AvailableMoney
, mkConstant: Constant
, mkNegValue: NegValue
, mkAddValue: AddValue
, mkSubValue: SubValue
, mkMulValue: MulValue
, mkRational: Rational
, mkScale: Scale
, mkChoiceValue: ChoiceValue
, mkSlotIntervalStart: SlotIntervalStart
, mkSlotIntervalEnd: SlotIntervalEnd
, mkUseValue: UseValue
, mkCond: Cond
}

data ContractParseError
= EmptyInput
| ContractParseError { message :: String, row :: Int, column :: Int, token :: String }
Expand All @@ -141,17 +36,15 @@ instance showContractParseError :: Show ContractParseError where
show e = genericShow e

foreign import parse_ ::
forall a.
Fn5
Fn4
(Either ContractParseError (Term Contract))
({ message :: String, row :: Int, column :: Int, token :: String } -> Either ContractParseError (Term Contract))
(Term Contract -> Either ContractParseError (Term Contract))
(HelperFunctions a)
String
(Either ContractParseError (Term Contract))

parseContract :: String -> Either ContractParseError (Term Contract)
parseContract = runFn5 parse_ (Left EmptyInput) (Left <<< ContractParseError) Right helperFunctions
parseContract = runFn4 parse_ (Left EmptyInput) (Left <<< ContractParseError) Right

parse :: forall a. Parser a -> String -> Either String a
parse p = lmap show <<< runParser (parens p <|> p)
Expand Down
5 changes: 3 additions & 2 deletions marlowe-playground-client/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3024,9 +3024,10 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"

"nearley-webpack-loader@https://github.com/shmish111/nearley-webpack-loader/archive/master.tar.gz":
nearley-webpack-loader@^0.0.2:
version "0.0.2"
resolved "https://github.com/shmish111/nearley-webpack-loader/archive/master.tar.gz#f7e80853852229971ae0ded75cdae2a078908529"
resolved "https://registry.yarnpkg.com/nearley-webpack-loader/-/nearley-webpack-loader-0.0.2.tgz#7d7f2f758e6f3d510a5c3f7a0980514263770c83"
integrity sha512-N0dE+lUS88hJJrTi7kobtKgwudagdGFhlM5cK431UvQouBQaT32OJztPhYEH90dZQAQtrIO/BFh+paetwMMsCQ==
dependencies:
loader-utils "^1.1.0"
nearley "^2.11.0"
Expand Down
Loading

0 comments on commit cdc62cc

Please sign in to comment.