小编Sec*_*coe的帖子

Parsec-Parser工作正常,但可以做得更好吗?

我试着这样做:

解析表单中的文本:

一些文字#{0,0,0}一些文字#{0,0,0}#{0,0,0}更多文字#{0,0,0}

进入一些数据结构的列表:

[内部"一些文本",外部(0,0,0),内部"一些文本",外部(0,0,0),外部(0,0,0),内部"更多文本",外部(0, 0,0)]

所以这些#{a,b,c} -bits应该变成与文本其余部分不同的东西.

我有这个代码:

module ParsecTest where

import Text.ParserCombinators.Parsec
import Monad

type Reference = (Int, Int, Int)

data Transc = Inside String | Outside Reference
              deriving (Show)

text :: Parser Transc
text =  do
         x <- manyTill anyChar ((lookAhead reference) <|> (eof >> return (Inside "")));
         return (Inside x)

transc = reference <|> text

alot :: Parser [Transc]
alot = do
        manyTill transc eof

reference :: Parser Transc
reference = try (do{ char '#';
                  char …
Run Code Online (Sandbox Code Playgroud)

parsing haskell parsec

4
推荐指数
1
解决办法
289
查看次数

编程语言/平台,具有对AST的运行时访问

我正在寻求为一个简短的演示实现一些概念验证演示,其中正在运行的代码知道当前正在执行的代码块的散列"值".例如:

function BBB(a) {
  a = 2 * a;
  print me.hash;          --> "xxxxxxx" (value of BBB-syntax represenation)
  return a;                              
}

function AAA(a, b, c) {
  d = BBB(a);
  print me.hash;          --> "yyyyyyy" (value of AAA-Syntax representation, possibly dependant on value of BBB, but not necessary)
  return d;
}
Run Code Online (Sandbox Code Playgroud)

我本能地转向LISPish语言,但还没有成功使用Scheme.而且我很长时间没有接触过Common LISP,我怀疑它可能会这样做(提示赞赏).它不一定非常快,或者一个受欢迎的平台,可以是最具学术性和最奇怪的平台.这只是一个演示.

有没有人知道一种语言/平台能够开箱即用或者修补相对较少?我更喜欢某种解析/树状的东西,而不是实际的源代码.

programming-languages functional-programming metaprogramming common-lisp

2
推荐指数
1
解决办法
130
查看次数