Skip to content

Commit d080dd5

Browse files
committed
implement parser for userscript
1 parent 85f8899 commit d080dd5

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

hs-src/Language/Egison/Core.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ evalExpr env (IndexedExpr bool expr indices) = do
277277
Superscript n -> evalExprDeep env n >>= return . Superscript
278278
Subscript n -> evalExprDeep env n >>= return . Subscript
279279
SupSubscript n -> evalExprDeep env n >>= return . SupSubscript
280+
Userscript n -> evalExprDeep env n >>= return . Userscript
280281
) indices
281282

282283
ret <- case tensor of
@@ -285,6 +286,7 @@ evalExpr env (IndexedExpr bool expr indices) = do
285286
Superscript n -> evalExprDeep env n >>= extractScalar >>= return . Superscript
286287
Subscript n -> evalExprDeep env n >>= extractScalar >>= return . Subscript
287288
SupSubscript n -> evalExprDeep env n >>= extractScalar >>= return . SupSubscript
289+
Userscript n -> evalExprDeep env n >>= extractScalar >>= return . Userscript
288290
) indices
289291
return $ Value (ScalarData (Div (Plus [(Term 1 [(Symbol id name js2, 1)])]) (Plus [(Term 1 [])])))
290292
(Value (ScalarData _)) -> do
@@ -300,11 +302,13 @@ evalExpr env (IndexedExpr bool expr indices) = do
300302
Superscript n -> evalExprDeep env n >>= extractScalar >>= return . Superscript
301303
Subscript n -> evalExprDeep env n >>= extractScalar >>= return . Subscript
302304
SupSubscript n -> evalExprDeep env n >>= extractScalar >>= return . SupSubscript
305+
Userscript n -> evalExprDeep env n >>= extractScalar >>= return . Userscript
303306
) indices
304307
refArray tensor (map (\j -> case j of
305308
Superscript k -> ScalarData k
306309
Subscript k -> ScalarData k
307310
SupSubscript k -> ScalarData k
311+
Userscript k -> ScalarData k
308312
) js2)
309313
let ret2 = case expr of
310314
(VarExpr var) -> do
@@ -321,6 +325,7 @@ evalExpr env (IndexedExpr bool expr indices) = do
321325
f (Superscript _) = Superscript ()
322326
f (Subscript _) = Subscript ()
323327
f (SupSubscript _) = SupSubscript ()
328+
f (Userscript _) = Userscript ()
324329

325330
evalExpr env (SubrefsExpr bool expr jsExpr) = do
326331
js <- evalExpr env jsExpr >>= collectionToList >>= return . (map Subscript)
@@ -347,6 +352,7 @@ evalExpr env (SubrefsExpr bool expr jsExpr) = do
347352
f (Superscript _) = Superscript ()
348353
f (Subscript _) = Subscript ()
349354
f (SupSubscript _) = SupSubscript ()
355+
f (Userscript _) = Userscript ()
350356

351357
evalExpr env (SuprefsExpr bool expr jsExpr) = do
352358
js <- evalExpr env jsExpr >>= collectionToList >>= return . (map Superscript)
@@ -373,6 +379,7 @@ evalExpr env (SuprefsExpr bool expr jsExpr) = do
373379
f (Superscript _) = Superscript ()
374380
f (Subscript _) = Subscript ()
375381
f (SupSubscript _) = SupSubscript ()
382+
f (Userscript _) = Userscript ()
376383

377384
evalExpr env (UserrefsExpr bool expr jsExpr) = do
378385
val <- evalExprDeep env expr
@@ -494,6 +501,9 @@ evalExpr env (WithSymbolsExpr vars expr) = do
494501
isTmpSymbol symId (SupSubscript (ScalarData (Div (Plus [Term 1 [(Symbol id name is,n)]]) (Plus [Term 1 []]))))
495502
| symId == id = True
496503
| otherwise = False
504+
isTmpSymbol symId (Userscript (ScalarData (Div (Plus [Term 1 [(Symbol id name is,n)]]) (Plus [Term 1 []]))))
505+
| symId == id = True
506+
| otherwise = False
497507
removeTmpscripts :: String -> WHNFData -> EgisonM WHNFData
498508
removeTmpscripts symId (Intermediate (ITensor (Tensor s xs is))) = do
499509
let (ds, js) = partition (isTmpSymbol symId) is

hs-src/Language/Egison/Desugar.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ desugarIndex :: Index EgisonExpr -> DesugarM (Index EgisonExpr)
425425
desugarIndex (Superscript expr) = desugar expr >>= return . Superscript
426426
desugarIndex (Subscript expr) = desugar expr >>= return . Subscript
427427
desugarIndex (SupSubscript expr) = desugar expr >>= return . SupSubscript
428+
desugarIndex (Userscript expr) = desugar expr >>= return . Userscript
428429

429430
desugarPattern :: EgisonPattern -> DesugarM EgisonPattern
430431
desugarPattern pattern = LetPat (map makeBinding $ S.elems $ collectName pattern) <$> desugarPattern' pattern

hs-src/Language/Egison/Parser.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,8 @@ expr = P.lexeme lexer (do expr0 <- expr' <|> quoteExpr'
191191
return $ MultiSuperscript e1 e2)
192192
<|> try (char '_' >> expr' >>= return . Subscript)
193193
<|> try (char '~' >> expr' >>= return . Superscript)
194-
<|> try (string "~_" >> expr' >>= return . SupSubscript))
194+
<|> try (string "~_" >> expr' >>= return . SupSubscript)
195+
<|> try (char '|' >> expr' >>= return . Userscript))
195196

196197

197198
quoteExpr' :: Parser EgisonExpr
@@ -847,7 +848,6 @@ reservedOperators =
847848
, "_"
848849
, "^"
849850
, "&"
850-
, "|"
851851
, "|*"
852852
-- , "'"
853853
-- , "~"
@@ -987,17 +987,17 @@ identVar = P.lexeme lexer (do
987987
is <- many indexType
988988
return $ Var (splitOn "." name) is)
989989

990+
identVarWithoutIndex :: Parser Var
991+
identVarWithoutIndex = do
992+
x <- ident
993+
return $ stringToVar x
994+
990995
identVarWithIndices :: Parser VarWithIndices
991996
identVarWithIndices = P.lexeme lexer (do
992997
name <- ident
993998
is <- many indexForVar
994999
return $ VarWithIndices (splitOn "." name) is)
9951000

996-
identVarWithoutIndex :: Parser Var
997-
identVarWithoutIndex = do
998-
x <- ident
999-
return $ stringToVar x
1000-
10011001
indexForVar :: Parser (Index String)
10021002
indexForVar = try (char '~' >> Superscript <$> ident)
10031003
<|> try (char '_' >> Subscript <$> ident)

test/lib/math/tensor.egi

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,6 @@
7979
(match-lambda [integer integer]
8080
{[[$n ,n] (function [x y z])]
8181
[[_ _] 0]})
82-
{3 3})]
83-
[$g [| [| g_1_1 0 0 |]
84-
[| 0 g_2_2 0 |]
85-
[| 0 0 g_3_3 |] |]]}
86-
(show (d/d g x)))
82+
{3 3})]}
83+
(show (with-symbols {i j} (d/d g_i_j x))))
8784
"[| [| g_1_1|x 0 0 |] [| 0 g_2_2|x 0 |] [| 0 0 g_3_3|x |] |]")

0 commit comments

Comments
 (0)