• 千无
    2021-08-27
    几节课学下来,除了第一节课用了老师的代码(经过自己的改造),后面都是基于改造的代码来逐步迭代升级。 每行代码都是自己思考过才写下来的,实现了自己想要的功能后(比如第一节结束后,我扩展实现了作用域链,以支持不同作用域下的变量声明、函数传参,以及赋值表达式),再对比老师的代码来学习老师的编程思想。 这样看代码的时候能够一目十行,而且因为是带着问题去看的,所以会有更多收获。 唯一难受的,这个过程很痛苦。 但我想,这是最慢,但也是最快的一种学习方式。
    
    11
  • _______R
    2021-08-17
    关于 typeAnnotation 的 follow 集合,根据文中的说法,冒号 ':' 是 First 集,那么 Follow 集就是各个类型关键字,这些关键字有: : booleaan 布尔值 : number 数字 : string 字符串 : void : any : never : null : undefined : object 对象 : Array<typeName> 数组 : typeName[] 数组 : [] 元组 : identifier 自定义类型 如果是 go 语言,则是 i集合:int、int8、int16、int32、int64 u集合:uint、uint8、uint16、uint32、uint64 f集合:float32、float64 c集合:complex64、complex128 string 字符串 bool 布尔值 rune int32类型的别名,代表一个 UTF-8 字符 byte uint8类型的别名,代表一个 ASCII 字符 interface{} 空接口类型 [n]typeName 数组类型 []typeName slice 类型 map[typeName]typeName map类型 chan typeName channel 类型 struct 结构体类型
    展开
    
    2
  • chris
    2021-08-17
    老师目前的语法规则我仔细看后觉得好像还不是很严谨 * prog = statementList? EOF; * statementList = (variableDecl | functionDecl | expressionStatement)+ ; * variableDecl : 'let' Identifier typeAnnotation? ('=' singleExpression) ';'; * typeAnnotation : ':' typeName; * functionDecl: "function" Identifier "(" ")" functionBody; * functionBody : '{' statementList? '}' ; * statement: functionDecl | expressionStatement; * expressionStatement: expression ';' ; * expression: primary (binOP primary)* ; * primary: StringLiteral | DecimalLiteral | IntegerLiteral | functionCall | '(' expression ')' ; * binOP: '+' | '-' | '*' | '/' | '=' | '+=' | '-=' | '*=' | '/=' | '==' | '!=' | '<=' | '>=' | '<' * | '>' | '&&'| '||'|...; * functionCall : Identifier '(' parameterList? ')' ; * parameterList : expression (',' expression)* ; 例如variableDecl的最后一个括号是否应该带一个?, 且singleExpression未给出定义. 还有定义了一条statement但并未在哪里用到阿.
    展开
    共 1 条评论
    1
  • ifelse
    2022-09-10 来自浙江
    学习打卡
    
    
  • 慢动作
    2021-10-19
    变量声明的语法规则中,typeAnnotation 的 Follow 集合是不是=和;?
    
    
  • 黄东
    2021-09-05
    老师好,这个存放变量的值的map,全是编译时的还是运行时的呢,如果是编译时的,那运行时的变量的值的变化跟这个有关系吗
    
    
  • 奇想天外
    2021-08-29
    好像不支持负数?let i = -10 + 1; 这样的语句好像不行?
    
    
  • 有学识的兔子
    2021-08-21
    first 是: follow就很多了,string,number ,boolean,object,支持的数据类型,对象类型等,但应该不含关键字,原因是关键字一般在变量前面使用,与语法规则不符。
    
    
  • _______R
    2021-08-19
    宫老师,04的代码是不是还不完整?我用go调试了好久函数总是没消解引用,调了ts的好像也是没有
    
    
  • chris
    2021-08-17
    RefResolver.visitFunctionCall是否应该加一段对functionCall.parameters的visit, 如下: visitFunctionCall(functionCall:FunctionCall):any{ let symbol = this.symTable.getSymbol(functionCall.name); if (symbol != null && symbol.kind == SymKind.Function){ functionCall.decl = symbol.decl as FunctionDecl; } else{ if (functionCall.name != "println"){ //系统内置函数不用报错 console.log("Error: cannot find declaration of function " + functionCall.name); return; } } for(let param of functionCall.parameters) { this.visit(param); } }
    
    