Pandoc 的lua 过滤器使得迭代文档和修改文档变得非常容易。我的问题是我不知道如何隔离列表项元素。我可以在每个列表项中找到列表和块级内容,但我无法找到迭代列表项的方法。
例如,假设我有以下 Markdown 文档:
1. One string
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
假设我想将每个列表项的第一行设为粗体。我可以轻松更改 OrderedLists 中段落的处理方式,例如使用此过滤器和pandoc --lua-filter=myfilter.lua --to=markdown input.md
1. One string
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
这确实会将第一个段落元素更改为粗体,但它只会更改第一个列表项的第一段,因为它会遍历列表中所有列表项中的所有段落,而不是遍历每个列表项,然后遍历每个段落。
1. **One string**
Two string
2. Three string
Four string
Run Code Online (Sandbox Code Playgroud)
如果我再次将两个列表项分成两个单独的列表,第一个项目的第一段将被捕获,但我想捕获每个列表项的第一段!我在文档中找不到有关迭代列表项的任何内容。一个人应该怎样做呢?
在下面的代码中,是否可以获得 AST 节点的整个字符串表示形式,在这种情况下会返回window.alert('asdf')?
const ast = parse("window.alert('asdf')")
let preloadCode = ""
traverse(ast, {
CallExpression: function(path) {
// path.node.toString() ??
},
})
Run Code Online (Sandbox Code Playgroud) 是否可以使用groovy ast转换代码来操作java类?
如果是,请举个例子.
如果不是,请说明原因.
我正在玩ANTLR,并希望创建一个这样的函数:
MOVE x y z pitch roll
Run Code Online (Sandbox Code Playgroud)
这会产生以下AST:
MOVE
|---x
|---y
|---z
|---pitch
|---roll
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过没有运气,并且我不断让AST将参数作为兄弟姐妹,而不是孩子.
代码到目前为止:
C#:
class Program
{
const string CRLF = "\r\n";
static void Main(string[] args)
{
string filename = "Script.txt";
var reader = new StreamReader(filename);
var input = new ANTLRReaderStream(reader);
var lexer = new ScorBotScriptLexer(input);
var tokens = new CommonTokenStream(lexer);
var parser = new ScorBotScriptParser(tokens);
var result = parser.program();
var tree = result.Tree as CommonTree;
Print(tree, "");
Console.Read();
}
static void Print(CommonTree tree, string indent)
{ …Run Code Online (Sandbox Code Playgroud) 我试图找到如何使用CXXMemberCallExpr使用具有clang查询的匹配器
我已经尝试了各种情况排列,但无法让它发挥作用.看起来第一个char与转储相比较低,因此例如FunctionDecl在clang-query中变为functionDecl
如果-ast-dump匹配器名称与clang-query名称匹配会很好 - 但是猜测它们没有
例如.
clang-query> match CXXMemberCallExpr()
1:2: Matcher not found: CXXMemberCallExpr
clang-query> match cxxmemberCallExpr()
1:2: Matcher not found: cxxmemberCallExpr
clang-query> match CxxMemberCallExpr()
1:2: Matcher not found: CxxMemberCallExpr
clang-query> match CXXmemberCallExpr()
1:2: Matcher not found: CXXmemberCallExpr
clang-query> match cxxMemberCallExpr()
1:2: Matcher not found: cxxMemberCallExpr
Run Code Online (Sandbox Code Playgroud)
如果人们想要帮助更多我想创建一个匹配到Virtual :: foo(),所以所有调用基类的虚函数.
这是我试图使用的代码
class Virtual
{
public:
virtual void foo()
{
}
};
class Real : public Virtual
{
public:
virtual void foo()
{
}
};
void bar()
{
Virtual *v=new Real();
Real …Run Code Online (Sandbox Code Playgroud) 我还在学习Haskell,这个问题看起来非常基本,但它一直困扰着我.
鉴于以下内容
data Term =
Number Integer
| Abs Term
| Plus Term Term
| Mult Term Term
deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
我想创建一个解释器,如果我打电话,例如,
evaluate (Plus (Number 10) (Number 10))
Run Code Online (Sandbox Code Playgroud)
它将返回20.以下是我到目前为止的情况
myabsolute :: Integer -> Integer
myabsolute n = if n >= 0 then n else -n
evaluate :: Term -> Integer
evaluate Plus = evaluate(t1) + evaluate(t2)
evaluate Mult = evaluate(t1) * evaluate(t2)
evaluate Abs = myabs(evaluate(t1))
evaluate _ = 0
Run Code Online (Sandbox Code Playgroud)
我很困惑,如何让Number Integer一部分工作,因为我不知道如何提取号码,并将其映射到t1和t2中Plus, …
我试图找到调用函数名称的类名.
例如,假设我有:
class foo1(object):
bar1()
class foo2(object):
bar2()
class foo3(object):
bar3()
Run Code Online (Sandbox Code Playgroud)
如果我正在搜索bar2()我想收到:
class foo2(object):
bar2()
Run Code Online (Sandbox Code Playgroud)
我试过正则表达式class[\s\S]*bar2\(\)(?!class)的想法是,我会对另一个类的外观负面预测.不幸的是,[\ s\S]似乎已经匹配所有内容:https://regex101.com/r/kZ7eE5/1
有没有办法匹配,如果"class"只出现一次匹配所有其他字符(包括新行和制表符)?
也可以接受不需要正则表达式的替代方案.
我想编写一个Java应用程序,它在我的工作区中显示项目的所有名称.但我的程序总是注意如下.
Exception in thread "main" java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:411)
at myPackage.ProjectVisitor.<init>(ProjectVisitor.java:9)
at myPackage.ProjectVisitor.main(ProjectVisitor.java:16)
Run Code Online (Sandbox Code Playgroud)
以下是我创建自己的应用程序的步骤:
安装Java开发工具(JDT)
创建一个满足以下所有选项的空白eclipse插件:
添加名为org.eclipse.core.resources_3.10.1.v20150725-1910.jar的 .jar
按如下方式创建ProjectVisitor.java.
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
public class ProjectVisitor {
public ProjectVisitor() {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (IProject project : projects) {
// do something to display its name
}
}
public static void main(String[] args) {
ProjectVisitor m = new ProjectVisitor();
}
}
Run Code Online (Sandbox Code Playgroud)作为"Java应用程序"运行.
请帮我.提前致谢.
我试图使用Babel.js将ImportDeclaration插入JavaScript代码段中:
const babel = require('babel-core')
const t = babel.types
const traverse = babel.traverse
const template = babel.template
const generate = require('babel-generator').default
const babylon = require('babylon')
const code = [
"import A from 'a'",
"import B from 'b'",
"export default {",
" components: {",
" },",
" methods: {",
" init () {",
" }",
" }",
"}"
].join("\n")
console.log(code)
const ast = babylon.parse(code, {
sourceType: 'module'
})
var n = []
traverse(ast, {
ImportDeclaration: {
exit(path) {
n.push(path)
}
} …Run Code Online (Sandbox Code Playgroud)我是Haskell的新手,正在从事一项工作,我试图为一种简单的计算器语言提供解析功能。
我已经获得了语法,并且不允许更改它。我试图通过遍历字符串并递归使用解析函数来解决它。
语法应该是
Expr -> Int | -Expr | + Expr Expr | * Expr Expr
Int -> Digit | Digit Int
Digit -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Run Code Online (Sandbox Code Playgroud)
因此,我的函数将使用Expr语言的字符串作为参数,并以这种格式生成抽象语法树
data Ast = Tall Int | Sum Ast Ast | Mult Ast Ast| Min Ast| Var String deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
Ast应该是抽象的语法树
这就是到目前为止我的解析功能
parseEx :: [String] -> (Ast, [String])
parseEx [] = error "empty string"
parseEx (s:ss) …Run Code Online (Sandbox Code Playgroud) babeljs ×2
haskell ×2
java ×2
javascript ×2
antlr ×1
antlr3 ×1
antlrworks ×1
c++ ×1
clang ×1
eclipse-jdt ×1
groovy ×1
interpreter ×1
lua ×1
matcher ×1
pandoc ×1
parsing ×1
python ×1
regex ×1
string ×1
traversal ×1