【发布时间】:2019-07-16 07:11:51
【问题描述】:
我正在尝试创建自己的语言,并想知道传递构造函数是否是一个可能的功能,即 使用的语法基于 javascript 和其他一些语言,但对于我的选择,我正在考虑编译运行时并且想知道这个功能是否可能。采用如下结构的编译语言
// $ defines a variable declaration.
class Token{
static test(string){
return this.regex.test(string)
}
}
// javascript regex syntax used.
class Identifier:Token{
// bettere regex used
static regex = /[a-zA-Z]*/
}
class Equals: Token{
static regex = /=/
}
class Dollar: Token{
static regex = /\$/
}
class MyLanguage(String code,Parser ...parsers){
private tokens = []
static tokens = [Identifier,,Dollar]
init{
tokenize();
}
get parser(){
// parsers passed in constructor i.e kotlin syntax
for($parser in parsers){
// tokens part of lang instance on tokenize success
parser.shouldParse(tokens)
}
throw "Can not parser code"
}
tokenize(){
// not really reasonable but not what I am using
code = code.explode(" ")
// find valid token and instanciate
for($s in code){
for($token in self.tokens){
// test a string against a token class i.e Identifier.test("int")
if(token.test(s)){
// instanciating class constructor
tokens.push(new token(code))
}
}
}
}
}
class Parser{
static shouldParse(tokens){
tokens = tokens.copy
// do parse section validation test on tokens copy
}
}
class VariableDeclarationParser : Parser{
}
// expected tokens
// Identifier Identifier Equals Number
let lang =new Language("int a = 12",VariableDeclarationParser)
【问题讨论】:
-
是
class Equals extends Token {也没有定义this.regex,使用this.constructor.regex -
这个问题似乎更适合Software Engineering。我不知道 SO 在语言实现之前是否处理语言设计。
-
@vlaz 这与语言设计无关。
-
@JonasWilms 我读它的方式是,OP 正在尝试创建一种新的编程语言,它(某种程度上)基于 JS,但想知道是否可以实现某个功能(传递构造函数)。老实说,我也没有真正理解这个问题,但这就是我从中得到的。我不确定给出的代码是问题的示例还是解释器/编译器/其他东西。
-
@user633183 一直在寻找类似的东西,现在真的很有帮助,非常感谢
标签: javascript language-design