[讨论] 《自制编程语言》集中讨论帖

RednaxelaFX 2014-01-20
Baby's First Garbage Collector,这篇最近的博文所实现的GC与《自制编程语言》所实现的如出一辙。但可以肯定博主没读过这本书。所以说(初级实现)都选择这种实现方式是有其必然性么⋯
subchen 2014-02-19
看完了,很失望!

1. 很多东西都没讲到重点,也没有循序渐进,直接上代码。
2. 缺乏原理性的东西。
3. 翻译的很烂。

完全不如《language_implementation_patterns》 这本书。
erdas_zhuang 2014-05-05
两个问题请教, thanks.

1)我在编译crowbar_book_0_1的时候没有问题,不过在执行自带的测试用例的时候出错了。有人知道是什么问题吗?
D:\DIY-programming-language\win_sjis\crowbar_book_0_1>crowbar.exe test/test.crb
  5:¦¦¦¦?¦¦¦?¦(0x0d)

2)本来想导到eclipse下调试,去查问题1),结果发现在eclipse下面没法通过编译,any suggestion ?
/cygdrive/d/eclipse-cpp-kepler-SR2-win32-workspace/DIY_crowbar_0_1/Debug/../error.c:242: undefined reference to `yytext'
/cygdrive/d/eclipse-cpp-kepler-SR2-win32-workspace/DIY_crowbar_0_1/Debug/../error.c:245: undefined reference to `yytext'
./interface.o: In function `CRB_compile':
/cygdrive/d/eclipse-cpp-kepler-SR2-win32-workspace/DIY_crowbar_0_1/Debug/../interface.c:46: undefined reference to `yyin'
/cygdrive/d/eclipse-cpp-kepler-SR2-win32-workspace/DIY_crowbar_0_1/Debug/../interface.c:47: undefined reference to `yyparse'
collect2: error: ld returned 1 exit status
make: *** [DIY_crowbar_0_1.exe] Error 1
makefile:31: recipe for target 'DIY_crowbar_0_1.exe' failed
erdas_zhuang 2014-05-05
Sorry, my question is not a good one, it might be related to linking issue. I will do some research first.
budao 2014-05-09
哎,还是好好看书吧
喻红叶 2014-10-13
我目前准备看这本书,希望能完整的实现一门编程语言,这样更利于理解Java吧。既然R大说这本书关于编译原理的东西讲的很少,有没有比较好的编译原理书推荐(大学时上过编译原理课,都已经忘完了)?
friddle 2015-06-10
logical_or_expression
        : logical_and_expression
        | logical_or_expression LOGICAL_OR logical_and_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_OR_EXPRESSION, $1, $3);
        }
        ;
logical_and_expression
        : equality_expression
        | logical_and_expression LOGICAL_AND equality_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_AND_EXPRESSION, $1, $3);
        }
        ;


有点看不太懂这个逻辑。
与跟或的逻辑应该是并列的表达式吧。怎么会出现有包含关系。
新手求解释。
a596620989 2015-06-16
friddle 写道
logical_or_expression
        : logical_and_expression
        | logical_or_expression LOGICAL_OR logical_and_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_OR_EXPRESSION, $1, $3);
        }
        ;
logical_and_expression
        : equality_expression
        | logical_and_expression LOGICAL_AND equality_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_AND_EXPRESSION, $1, $3);


依我之见,这个是为了实现运算符优先级,即&&的优先级高于||.  实现思路跟计算器的add和mul一致。
friddle 2015-06-16
a596620989 写道
friddle 写道
logical_or_expression
        : logical_and_expression
        | logical_or_expression LOGICAL_OR logical_and_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_OR_EXPRESSION, $1, $3);
        }
        ;
logical_and_expression
        : equality_expression
        | logical_and_expression LOGICAL_AND equality_expression
        {
            $$ = crb_create_binary_expression(LOGICAL_AND_EXPRESSION, $1, $3);


依我之见,这个是为了实现运算符优先级,即&&的优先级高于||.  实现思路跟计算器的add和mul一致。


我开始认为&&和||优先级是一样的。后来我查了一下C语言的发现我自己的认识错了。非常感谢。
但是我又有第二个问题

我写的crowbar上的一段测试代码:
function test_if()
{
   gtest=1;
   if(gtest==2)
   {
     print("gtest is 1\n");
   }
   elsif(gtest==1)
   {
     print("test output\n");
   }
   elsif(gtest==1)
   {
     print("test output\n");
   }
}

test_if();

这个连续输出两次test output。是不是属于crowbar的实现bug。
具体的实现我看过了。到推出这个测试案列的。




jiewo 2015-09-17
一直使用java。到yacc、lex部分的确有些吃力。
Global site tag (gtag.js) - Google Analytics